Сохранить матрицу двойных значений в OpenCV - PullRequest
3 голосов
/ 23 мая 2010

У меня есть OpenCV матрица двойных (CV_32F) значений. Я хотел бы сохранить его на диск. Я знаю, я мог бы преобразовать его в 1-канальный 8-битный IplImage и сохранить его. Но так я теряю точность. Есть ли способ сохранить его непосредственно в 32-битном формате, без предварительного преобразования? Также было бы хорошо, если бы полученный файл имел формат изображения, чтобы я мог просмотреть результат в виде изображения.

Ответы [ 3 ]

3 голосов
/ 08 июня 2010

Вы всегда можете сохранить любой «объект» (CvMat, IplImage, что угодно ..) из OpenCV «как есть» с помощью cvSave () и загрузить его обратно с помощью cvLoad (). Что касается моего опыта, большинство изображений с плавающей точкой работает неправильно, я обычно сохраняю свои данные с плавающей точкой таким образом. Однако вы не можете напрямую просматривать сохраненные данные.

Другая возможность, которую мы часто использовали, включает в себя собственную сборку OpenEXR. С помощью этой библиотеки вы можете легко сохранять изображения с плавающей точкой с полной точностью, и многие сторонние приложения могут открывать файлы EXR. Обратите внимание, что OpenCV включает в себя OpenEXR, если я не ошибаюсь, но в последний раз, когда я пытался, сохранение / загрузка изображений с плавающей запятой не работала правильно. Тем не менее, вы должны сначала попытаться сохранить образ fp как * .exr, возможно, это уже работает с последними версиями.

0 голосов
/ 04 марта 2011

Это старый, но думал, что я добавлю свои два цента.

Если вы просто хотите сохранить плавающие изображения на диск, и вам не нужно их просматривать, вы можете посмотреть формат изображения Portable Float Map (PFM). Очень простой формат, просто сохраняет float на диск, без сжатия, минимальный заголовок. Вы можете написать свой собственный код для чтения / записи очень быстро. Это то, что я использую для исследования HDR.

Как отмечали другие, для «просмотра» плавающих изображений вам нужно задать себе несколько вопросов об их содержимом и о том, как разумно уменьшить их до 8-битного диапазона, который вы можете отобразить на мониторе. Вы могли бы рассмотреть средство просмотра изображений Matlab (функция imshow), которое предлагает некоторые функции двойного масштабирования.

Вы можете также рассмотреть возможность сохранения в формате EXR или HDR и с помощью встроенного в Photomatix средства просмотра изображений HDR, которое предоставляет вам небольшое отдельное окно, в котором отображается окно с тональным отображением в реальном времени вокруг текущей позиции курсора. Это хороший способ навигации по HDR или изображениям с плавающей запятой, чтобы получить представление о том, «что там на самом деле», без создания тональной карты.

0 голосов
/ 23 мая 2010

Вы всегда можете перебрать матрицу и написать ее самостоятельно. Если вы хотите, чтобы его можно было просматривать в виде изображения, вы можете использовать вариант PPM . Я не уверен, какие программы будут иметь возможность естественного чтения вашего формата изображения, если вы используете значения вне диапазона 0-255.

...