В настоящее время объявлено, что cvSaveImage () принимает только два параметра:
int cvSaveImage( const char* filename, const CvArr* image );
Однако " последний протестированный снимок " имеет:
#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 для передачи третьего параметра:
int p[3];
p[0] = CV_IMWRITE_JPEG_QUALITY;
p[1] = desired_quality_value;
p[2] = 0;
Я не знаю, как кодируется значение качества, и я никогда не пробовал этого, поэтому будьте осторожны с emptor.
Edit:
Будучи немного любопытным по этому поводу, я скачал и собрал последнюю транковую версию OpenCV и смог подтвердить вышеизложенное с помощью этого небольшого кода:
#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);
}
Мой "test.jpg" был 2054 КБ, созданный "out1.jpg" - 182 КБ, а "out2.jpg" - 4 009 КБ.
Похоже, вы должны быть в хорошей форме, при условии, что вы можете использовать самый последний код, доступный в хранилище Subversion.
Кстати, диапазон для параметра качества 0-100, по умолчанию 95.