Использование образа Java в pythonic OpenCV

#java #python #scala #opencv

#java #python #scala #opencv

Вопрос:

Я извлекаю некоторые изображения через HTTP:

 val ostream = new ByteArrayOutputStream()
ImageIO.write(imageurl, imageType, ostream)
val istream = new ByteArrayInputStream(ostream.toByteArray)
  

(на самом деле это scala, но сам этот код использует библиотеки Java, поэтому в нем нет специфичной для scala магии).
Затем я нажимаю istream на базу данных (в моем случае это GridFS, которая является частью MongoDB).
И теперь мне нужно использовать его image (bytearray) в OpenCV (с привязками к python):

 db = Connection(myserver,myport).DB
fs = GridFS(db)
bytearray = fs.get(id).read() 
  

Учитывая это, как я могу создать Mat для использования в функциях OpenCV?

Ответ №1:

Возможно, вам нужна функция imdecode.

Комментарии:

1. Он существует в native C OpenCV, но я не могу найти imdecode ссылку на привязку python ни в коде.

2. @om-nom-nom Какую версию OpenCV вы используете? Эта функция доступна с версии OpenCV 2.2. Без этой функции вы можете только сохранить изображение во временный файл и прочитать его с помощью LoadImage или декодировать изображение с помощью другой библиотеки.

3. 2.1.0-2 (python-opencv) из репозитория gijzelaar. Я видел более новые пакеты opencv, но в этом репозитории нет новых привязок python (я знаю, что могу создать opencv самостоятельно, используя код с willowgarage или какого-либо другого сайта, но я бы предпочел не делать этого, если есть другой способ). Запись образов на диск и последующая замена их обратно будут работать, но это значительно снизит производительность.