Мне было интересно, есть ли способ легко указать коэффициент сжатия при сжатии изображений в opencv без необходимости объявлять фиктивный вектор. Если я объявляю вектор p (аналогично это обсуждение), но содержащий только 2 элемента , что и требуется для imwrite, я могу позвонить:

vector<int> p(2);
p[0] = CV_IMWRITE_JPEG_QUALITY;
p[1] = 50; // compression factor

imwrite("compressed.jpg", img, p);

Вышеупомянутое отлично работает. Однако я хочу сжать одно и то же изображение с несколькими коэффициентами сжатия в цикле. Есть ли способ явно передать параметр в imwrite? Что-то вроде:

imwrite("compressed.jpg", img, {CV_IMWRITE_JPEG_QUALITY, factor}); // this doesn't work

Как примечание, заголовок функции:

bool imwrite(const string& filename, const Mat& img, const vector<int>& params=vector<int>());

Благодарность!

Обновление: После активации C ++ 0x я могу передать в функцию явно определенный встроенный вектор.

7
Everaldo Aguiar 30 Авг 2011 в 03:26

2 ответа

Лучший ответ

Как и предполагалось, активация C ++ 0x позволяет мне передать вектор, явно определенный встроенным в функцию. Это решило проблему.

3
Everaldo Aguiar 18 Окт 2013 в 19:51
vector<int> compression_params;
compression_params.push_back(IMWRITE_JPEG_QUALITY);
compression_params.push_back(30);
compression_params.push_back(IMWRITE_JPEG_PROGRESSIVE);
compression_params.push_back(1);
compression_params.push_back(IMWRITE_JPEG_OPTIMIZE);
compression_params.push_back(1);
compression_params.push_back(IMWRITE_JPEG_LUMA_QUALITY);
compression_params.push_back(30);
imwrite('sample.jpg', img, compression_params);
0
rayryeng 29 Мар 2021 в 17:23