OpenCV を使用し、cvSaveImage 関数を使用して jpeg として保存していますが、これで使用される jpeg 圧縮率が見つかりません。
- cvSaveImage(...)のJPEG圧縮率とは
- cvSaveImage(...) を使用するときに圧縮率を渡すにはどうすればよいですか
現在、cvSaveImage() は 2 つのパラメーターのみを取るように宣言されています。
int cvSaveImage( const char* filename, const CvArr* image );
ただし、「最新のテスト済みスナップショット」には次のものがあります。
#define CV_IMWRITE_JPEG_QUALITY 1
#define CV_IMWRITE_PNG_COMPRESSION 16
#define CV_IMWRITE_PXM_BINARY 32
/* save image to file */
CVAPI(int) cvSaveImage( const char* filename, const CvArr* image,
const int* params CV_DEFAULT(0) );
私はドキュメントを見つけることができませんでしたが、このコードを調べたときの印象は、int 値の配列を作成して 3 番目のパラメーターに渡すということです。
int p[3];
p[0] = CV_IMWRITE_JPEG_QUALITY;
p[1] = desired_quality_value;
p[2] = 0;
品質値がどのようにエンコードされているかわかりません。また、これを試したこともありません。
編集:
これについて少し興味があったので、OpenCV の最新のトランク バージョンをダウンロードしてビルドし、この使い捨てコードを介して上記を確認することができました。
#include "cv.h"
#include "highgui.h"
int main(int argc, char **argv)
{
int p[3];
IplImage *img = cvLoadImage("test.jpg");
p[0] = CV_IMWRITE_JPEG_QUALITY;
p[1] = 10;
p[2] = 0;
cvSaveImage("out1.jpg", img, p);
p[0] = CV_IMWRITE_JPEG_QUALITY;
p[1] = 100;
p[2] = 0;
cvSaveImage("out2.jpg", img, p);
exit(0);
}
私の「test.jpg」は2,054KB、作成した「out1.jpg」は182KB、「out2.jpg」は4,009KBでした。
Subversion リポジトリから入手できる最新のコードを使用できるとすれば、あなたは順調に進んでいるように見えます。
ところで、品質パラメータの範囲は 0 ~ 100 で、デフォルトは 95 です。
imwrite("filename.jpeg",src,(vector<int>){CV_IMWRITE_JPEG_QUALITY, 20});
filename.jpeg
出力されるファイル名src
変数を含むソース画像読み取り(vector<int>)
型キャスト{CV_IMWRITE_JPEG_QUALITY, 20}
Param_ID として渡される要素の配列 - imwrite 関数の Param_value