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

来源:互联网 发布:萝卜花园软件 编辑:程序博客网 时间:2024/04/27 14:21


        例如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 <opencv2\opencv.hpp>  #include<iostream>#include <stdio.h>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。

0 0
原创粉丝点击