1. 程式人生 > >利用Opencv儲存圖片,並生成JPG格式,調整壓縮質量。

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