C++ OpenCV cvSaveImage Jpeg压缩因子
我正在使用OpenCV并使用cvSaveImage函数保存为jpeg,但是我找不到该函数使用的jpeg压缩因子C++ OpenCV cvSaveImage Jpeg压缩因子,c++,image,opencv,jpeg,C++,Image,Opencv,Jpeg,我正在使用OpenCV并使用cvSaveImage函数保存为jpeg,但是我找不到该函数使用的jpeg压缩因子 cvSaveImage(…)的Jpeg压缩系数是多少 使用cvSaveImage(…)时如何传递压缩因子 您可能可以在以下源代码中找到这一点: 您不能,因为函数不接受这样的参数。如果您想控制压缩,那么我能想到的最简单的方法是首先使用cvSaveImage()将图像保存为位图(或您选择的另一种无损格式),然后使用另一个图像库将其转换为所需压缩因子的JPEG 当前,cvSaveImage(
int cvSaveImage( const char* filename, const CvArr* image );
但是,“”具有:
我一直找不到任何文档,但我对这段代码的印象是,您将构建一个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”是2054KB,创建的“out1.jpg”是182KB,“out2.jpg”是4009KB
假设您可以使用Subversion存储库中提供的最新代码,那么您的状态应该良好
顺便说一句,质量参数的范围是0-100,默认值是95。OpenCV现在可以设置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);
const int JPEG_QUALITY=80;
Mat-src;
//将数据放入src
向量参数;
参数推回(CV\u IMWRITE\u JPEG\u质量);
参数推回(JPEG_质量);
imwrite(“filename.jpg”,src,params);
如果您使用的是C++0x,则可以使用以下较短的符号:
imwrite("filename.jpg", src, vector<int>({CV_IMWRITE_JPEG_QUALITY, JPEG_QUALITY});
imwrite(“filename.jpg”,src,vector({CV\u imwrite\u JPEG\u QUALITY,JPEG\u QUALITY});
imwrite(“filename.jpeg”,src,(vector){CV\u imwrite\u jpeg\u QUALITY,20});
将作为输出文件名filename.jpeg
be读取包含变量的源图像src
类型转换(向量)
在IMWRITE函数中作为Param_ID和Param_值传递的元素数组{CV_IMWRITE_JPEG_QUALITY,20}
imwrite("filename.jpg", src, vector<int>({CV_IMWRITE_JPEG_QUALITY, JPEG_QUALITY});
imwrite("filename.jpeg",src,(vector<int>){CV_IMWRITE_JPEG_QUALITY, 20});