该版本cvSaveImage Jpeg压缩因子
题
我使用开源和节能为jpeg使用cvSaveImage功能,但我无法找到Jpeg压缩因子的使用。
- 什么cvSaveImage(...)'s Jpeg压缩因子
- 我如何可以通过压缩因子的时候使用cvSaveImage(...)
解决方案
目前声明cvSaveImage()只接受两个参数:
int cvSaveImage( const char* filename, const CvArr* image );
然而,<!>“最新测试的快照一> <> QUOT!;有:
#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存储库中提供的最新代码,您看起来应该处于良好状态。
BTW,质量参数的范围是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);
如果您使用的是C ++ 0x,则可以使用这种较短的表示法:
imwrite("filename.jpg", src, vector<int>({CV_IMWRITE_JPEG_QUALITY, JPEG_QUALITY});
- 你可以在这里找到源代码: http:// opencvlibrary.svn.sourceforge.net/viewvc/opencvlibrary/
- 你不能,因为函数不接受这样的参数。如果你想控制压缩,那么我能想到的最简单的方法是首先用cvSaveImage()(或你选择的另一种无损格式)将图像保存为位图,然后使用另一个图像库将其转换为JPEG的所需的压缩系数。 醇>
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功能
不隶属于 StackOverflow