Как кодировать массив numpy с помощью PIL, например, cv2.imencode () opencv?

#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()) кажется, это работает