В Python я хочу преобразовать изображение, которое было обработано с использованием OpenCV, для передачи в определенном формате изображения ( TIFF в данном случае, но может быть: BMP, JPEG, PNG, ... ..).
Для этого достаточно закодировать изображение OpenCV в буфер памяти. Проблема в том, что когда я использую cv2.imencode()
для этого, возвращаемый объект по-прежнему выглядит как массив numpy
:
import cv2
img_cv2_aka_nparr = cv2.imread('test.jpg')
my_format = '.tiff'
retval, im_buffer = cv2.imencode(my_format, img_cv2_aka_nparr)
print type(im_buffer)
im_buffer
- это просто еще один массив numpy
- он вовсе не является потоком в TIFF-кодировке! Насколько я могу судить, образы OpenCV в python всегда ведут себя как numpy
массивы и даже выглядят как numpy
массивы через type()
.
На самом деле, если вы хотите создать фиктивный «образ OpenCV», вы должны использовать numpy
- см., Например, https://stackoverflow.com/a/22921648/1021819
Почему это так и как это исправить? То есть, как я могу получить фактический закодированный потоком TIFF поток, а не другой массив numpy
?
Теперь мне нравится numpy
, но в этом случае мне нужно, чтобы изображение было читаемым не-python-сервисами, поэтому оно должно быть в общедоступном (предпочтительно без потерь) формате (см. Список выше).
(Я обошел дома встраивания numpy
в JSON и решил против этого.)
Я мог бы использовать PIL
/ подушку, scipy
и некоторые другие, но я пытаюсь минимизировать зависимости (т.е. пока только cv2
, numpy
и встроенные).
Спасибо!