2012-04-18 166 views
2


私はtifファイルを切り抜くためにopencvを使用していますが、画像はファイルに保存する以外は問題ありません。-opencvは常にLZW圧縮を使用しますが、結果ファイルに対して圧縮は必要ありません。私のディスクドライブのスペースが、今はそれを行うための適切な時期ではありません。
特定の圧縮方式(圧縮を含まない)または非圧縮形式のtifファイルを保存する方法はありますか?

元画像には圧縮方式が適用されていません。領域を選択するにはROIを使用し、ターゲットファイルに保存するにはSaveImageを使用しています。どんな助けにも感謝!opencvでTIFFファイルを保存するときに特定の圧縮方式を設定する方法はありますか?

答えて

3

TIFF圧縮レベルはハードコードされており、実行時に変更できません。あなたがあなたのマシン上のOpenCVをコンパイルしている場合は、このファイルに

3rdparty/libtiff/tiff.h 

を圧縮レベルを編集することができますが、この行を見つけます:

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

お役に立てば幸いです。

編集:OpenCVのコードでは、この行を参照してください。 https://github.com/Itseez/opencv/blob/b46719b0931b256ab68d5f833b8fadd83737ddd1/modules/imgcodecs/src/grfmt_tiff.cpp#L564 あなたはCOMPRESSION_NONE含むTIFFTAG_COMPRESSIONの目標値を、渡すことができるはずです。 OpenCVの3で

+0

MEH、これは良いではない、私は一日か二日でそれをチェックアウトします私は今すぐソースをダウンロードする機会がないので、時間がかかります。ありがとう! – cookieMonster

+0

@fireant、あなたは、OpenCVソースでハードコーディングされた圧縮方法をどこで変更するべきか知っていますか?あなたが言及した '3rdparty/libtiff/tiff.h'はlibtiff自体の一部であり、' #define COMPRESSION_CCITT_T6 4/* CCITT T.6(TIFF 6 name)*/'を含む様々な圧縮メソッドの定義を含んでいます。だから実際には、OpenCVのどこでこれらの定義がハードコード化されているかを知る必要があります。 –

+0

@ alexander-abakumov私は答えを更新しました。それがあなたが探しているものかどうかを見てください。 – fireant

3

あなたはのように、圧縮またはストリップあたりの行のようなものを変更するには、パラメータのベクトルを供給することができます:

vector<int> params = { 
    259, 1,  // No compression, turn off default LZW 
    279, 64  // Rows per strip 
}; 
imwrite("image.tiff", myImage, params); 
+0

残念ながら、CCITTG4のtiffイメージを保存することはできません。おそらく、Matが少なくとも8ビットの行列であるからでしょう。 – Xvolks

関連する問題