Attualmente cvSaveImage() viene dichiarato di prendere solo due parametri:
int cvSaveImage(const char* filename, const CvArr* image);
Tuttavia, il "latest tested snapshot" ha:
#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));
Sono stato in grado di trovare alcuna documentazione, ma la mia impressione derivante da questo codice è che dovresti creare un array di valori int da passare nel terzo parametro:
int p[3];
p[0] = CV_IMWRITE_JPEG_QUALITY;
p[1] = desired_quality_value;
p[2] = 0;
Non so come sia codificato il valore di qualità e non l'ho mai provato, quindi caveat emptor.
Edit:
Essendo un po 'curioso di questo, ho scaricato e costruirono l'ultima versione tronco di OpenCV, ed è stato in grado di confermare quanto sopra tramite questo pezzo di codice usa e getta:
#include "cv.h"
#include "highgui.h"
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);
}
Il mio "test.jpg" era 2.054 KB, il "out1.jpg" creato era 182 KB e "out2.jpg" era 4.009 KB.
Sembra che si dovrebbe essere in buona forma assumendo che è possibile utilizzare l'ultimo codice disponibile dal repository Subversion.
BTW, l'intervallo per il parametro di qualità è 0-100, di default è 95.
posto sull'uomo, grazie! –
Riduce la qualità dell'immagine e distorce davvero l'immagine. Consigliamo gentilmente qualsiasi soluzione che riduca le dimensioni del file senza distorcere la qualità dell'immagine. – AnkitRox