Есть ли способ установить конкретную схему сжатия при сохранении файла tiff в opencv?


Я использую opencv для обрезки файлов tif, все в порядке, кроме сохранения изображения в файл - opencv всегда использует сжатие LZW, но мне не нужно сжатие полученных файлов, я ценю помощь opencv в сохранении моих место на диске, но сейчас не время для этого.
Так есть ли способ сохранить файлы tif с определенной схемой сжатия (включая отсутствие сжатия) или нет?

К исходным изображениям не применяется схема сжатия, и я использую ROI для выбора области и SaveImage для сохранения в целевой файл. Любая помощь приветствуется!


person cookieMonster    schedule 18.04.2012    source источник


Ответы (2)


Уровень сжатия TIFF жестко запрограммирован и не может быть изменен во время выполнения. Если вы компилируете OpenCV на своем компьютере, вы можете редактировать уровень сжатия в этом файле.

3rdparty/libtiff/tiff.h

вы найдете эту строку:

#define     COMPRESSION_LZW     5       /* Lempel-Ziv  & Welch */

Надеюсь, это поможет.

Изменить: см. Эту строку в коде opencv:

person fireant    schedule 18.04.2012
comment
Мех, это нехорошо, я проверю это через день или два, у меня нет возможности скачать исходники прямо сейчас, так что это займет некоторое время. Спасибо! - person cookieMonster; 18.04.2012
comment
@fireant, вы знаете, где в исходниках OpenCV нужно менять жестко закодированный метод сжатия? Упомянутый вами 3rdparty/libtiff/tiff.h является частью самого libtiff и содержит определения для различных методов сжатия, включая #define COMPRESSION_CCITT_T6 4 /* CCITT T.6 (TIFF 6 name) */. Итак, на самом деле нам нужно найти, где в OpenCV использование этих определений жестко запрограммировано. - person Alexander Abakumov; 17.06.2015
comment
@ alexander-abakumov Я обновил ответ, посмотрите, если это то, что вы ищете. - person fireant; 17.06.2015
comment
@fireant, спасибо! Это точно такая же строчка, которую я изменил несколько часов назад :) - person Alexander Abakumov; 17.06.2015

В OpenCV 3 вы можете предоставить вектор параметров для изменения таких вещей, как сжатие или количество строк на полосе, как в:

vector<int> params = { 
    259, 1,     // No compression, turn off default LZW
    279, 64     // Rows per strip 
};
imwrite("image.tiff", myImage, params);
person Jay Borseth    schedule 09.12.2015
comment
К сожалению, сохранить изображение tiff CCITTG4 не удается. Наверное потому, что Мат - это как минимум 8-битная матрица. - person Xvolks; 25.01.2017