利用Opencv保存图片,并生成JPG格式,调整压缩质量。



        例如Photoshop软件保存JPG图像时有低、中、高和最佳的保存选项设置,对应生成的图像的大小也不同。用OpenCV生成的图像相对较大,可能类似对应Photoshop最佳的那种保存的,但是我想要相对小一些的图像,请问如何才能用OpenCV设置JPG图像的压缩质量?

通常用opencv中的函数cvSaveImage(filename,img)来保存图像,很少注意到它还有第三个参数。第三个参数就是用来调整JPG图像压缩质量的,它是一个含有3个元素的数组,具体使用方法如下:

  #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 p[3];
  p[0] = CV_IMWRITE_JPEG_QUALITY;
  p[1] = desired_quality_value;
  p[2] = 0;

#include   
#include
#include 
using namespace cv;

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);

}


另外还有一种方法,利用imwrite()函数保存图片,同时进行调整压缩图片质量。
保存图像 imwrite()
bool imwrite(const string& filename,InputArray img,const vector& params=vector())
params中的每个参数成对出现,即paramId_1, paramValue_1, paramId_2, paramValue_2, … ,当前支持如下参数:
JPEG:压缩质量 ( CV_IMWRITE_JPEG_QUALITY ),从0到100(数值越高质量越好),默认值为95。
PNG:compression level ( CV_IMWRITE_PNG_COMPRESSION ) 从0到9。 数值越高,文件大小越小,压缩时间越长。默认值为3。
PPM, PGM, or PBM:二进制标志 ( CV_IMWRITE_PXM_BINARY ),0 或 1。默认值为1。

你可能感兴趣的:(opencv,压缩,图片,质量,图像处理,C/C++编程)