例如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) );
p[0] = CV_IMWRITE_JPEG_QUALITY; p[1] = desired_quality_value; p[2] = 0;int p[3];
#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。
如果觉得《利用Opencv保存图片 并生成JPG格式 调整压缩质量。》对你有帮助,请点赞、收藏,并留下你的观点哦!