我正在使用OpenCV並使用cvSaveImage函數保存爲jpeg,但我無法找到由此使用的Jpeg壓縮因子。OpenCV cvSaveImage Jpeg壓縮因子
- 什麼cvSaveImage(...)的Jpeg格式壓縮因子
- 我如何使用cvSaveImage(...)
我正在使用OpenCV並使用cvSaveImage函數保存爲jpeg,但我無法找到由此使用的Jpeg壓縮因子。OpenCV cvSaveImage Jpeg壓縮因子
目前cvSaveImage()聲明採取只有兩個參數:
int cvSaveImage(const char* filename, const CvArr* image);
然而, 「latest tested snapshot」 有:
#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值的數組來傳遞第三個參數:
int p[3];
p[0] = CV_IMWRITE_JPEG_QUALITY;
p[1] = desired_quality_value;
p[2] = 0;
我不知道質量值是如何編碼的,我從來沒有試過這個,所以要警惕emptor。
編輯:
作爲一個有點好奇,我下載和建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,054 KB,創建的「out1.jpg」是182 KB,「out2.jpg」是4,009 KB。
看起來你應該狀態良好,假設你可以使用Subversion版本庫中的最新代碼。
BTW,對於質量參數的範圍是0-100,默認爲95
的OpenCV現在has a parameter設置JPEG質量。我不確定這是什麼時候推出的,但大概在2.0之後。
const int JPEG_QUALITY = 80;
Mat src;
// put data in src
vector<int> params;
params.push_back(CV_IMWRITE_JPEG_QUALITY);
params.push_back(JPEG_QUALITY);
imwrite("filename.jpg", src, params);
如果使用的C++ 0x,則可以使用該較短的符號:
imwrite("filename.jpg", src, vector<int>({CV_IMWRITE_JPEG_QUALITY, JPEG_QUALITY});
imwrite("filename.jpeg",src,(vector<int>){CV_IMWRITE_JPEG_QUALITY, 20});
filename.jpeg
將輸出文件名src
是源圖像讀取包含變量(vector<int>)
類型轉換{CV_IMWRITE_JPEG_QUALITY, 20}
元件的陣列爲Param_ID傳遞 - 在人
斑點和Param_value在imwrite功能,謝謝! – 2009-05-05 16:58:05