我正在使用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