Actualmente cvSaveImage() se declara a tomar sólo dos parámetros:
int cvSaveImage(const char* filename, const CvArr* image);
Sin embargo, el "latest tested snapshot" tiene:
#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));
he sido incapaz de encontrar ninguna documentación, pero mi impresión al hurgar en este código es que construiría una matriz de valores int para pasar en el tercer parámetro:
int p[3];
p[0] = CV_IMWRITE_JPEG_QUALITY;
p[1] = desired_quality_value;
p[2] = 0;
No sé cómo se codifica el valor de calidad, y nunca lo he intentado, así que caveat emptor.
Editar:
Siendo un poco curioso de este, he descargado y construyó la versión más reciente de tronco de OpenCV, y fue capaz de confirmar lo anterior a través de este trozo de código de usar y tirar:
#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);
}
Mi "test.jpg" fue 2.054 KB, el "out1.jpg" creado fue 182 KB y "out2.jpg" fue 4.009 KB.
Parece que debe estar en buen estado suponiendo que puede utilizar el último código disponible del repositorio de Subversion.
Por cierto, el rango para el parámetro de calidad es 0-100, por defecto es 95.
lugar en el hombre, gracias! –
Reduce la calidad de la imagen y realmente distorsiona la imagen. Sugiera amablemente cualquier solución que reduzca el tamaño del archivo sin distorsionar la calidad de la imagen. – AnkitRox