我正在使用OpenCV,并使用cvSaveImage函数将其另存为jpeg,但是我无法找到它使用的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;
我不知道质量值是如何编码的,而且我从来没有尝试过,所以请警告。
编辑:
对此感到有点好奇,我下载并构建了最新的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存储库中提供的最新代码,则您的状态应该看起来不错。
顺便说一句,质量参数的范围是0-100,默认值是95。