繁体   English   中英

OpenCV cvSaveImage Jpeg压缩因子

[英]OpenCV cvSaveImage Jpeg Compression Factor

我正在使用OpenCV并使用cvSaveImage函数保存为jpeg,但我无法找到此使用的Jpeg压缩因子。

  1. 什么是cvSaveImage(...)的Jpeg压缩因子
  2. 使用cvSaveImage(...)时如何传递压缩因子

目前cvSaveImage()被声明为只接受两个参数:

int cvSaveImage( const char* filename, const CvArr* image );

但是,“ 最新测试快照 ”有:

  #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。

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});
  1. 你可以在这里找到源代码中找到这个: http//opencvlibrary.svn.sourceforge.net/viewvc/opencvlibrary/
  2. 你不能,因为函数不接受这样的参数。 如果你想控制压缩,那么我能想到的最简单的方法是首先用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传递的元素数组 - 以及imwrite函数中的Param_value

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM