#python #numpy #opencv #flask #python-imaging-library
Вопрос:
Я создаю REST API с помощью flask и хочу отправить изображение на свой сервер. До сих пор я это делал-
from PIL import Image, ImageOps import cv2 image= Image.open("image.jpg") size = (224, 224) image = ImageOps.fit(image, size, Image.ANTIALIAS) image= np.array(image) _, JPEG = cv2.imencode('.jpg', image) response_raw = requests.post(test_url, data=JPEG.tostring(), headers=headers)
Теперь это работает отлично, но, к сожалению, я использую OPENCV для своего окончательного проекта. Поэтому я протестировал PIL, пытаясь повторить cv2.imencode()
метод, но это не сработало. Я сделал это, заменив cv2.imencode
метод (и удалив image=np.array(image)
—
buffer = BytesIO() image.save(buffer, format="JPEG") JPEG = buffer.getvalue()
Это не сработало как type(JPEG)
возврат lt;class 'bytes'gt;
, в то время как рабочий код (с cv2.imencode("jpg", img)
) был изменен lt;class 'numpy.ndarray'gt;
.
Как мне выполнить процесс кодирования в массиве numpy?
Комментарии:
1. Попробуй
JPEG = np.array(buffer.getvalue())
, что ты получишь?2. Я не понимаю, почему ты в замешательстве.
bytes
объект содержит байты. массив numpy типа uint8 (который у вас там…) также содержит байты.3. Хорошо, я просто был очень смущен всем этим. np.array(buffer.get_value ()), кажется, работает. Спасибо! Прости!
Ответ №1:
JPEG = np.array(buffer.getvalue())
кажется, это работает