利用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 <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。