Сжатие изображений в opencv (imwrite). Как явно установить коэффициент сжатия? - PullRequest
6 голосов
/ 30 августа 2011

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

vector<int> p;
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, я могу передать вектор, явно определенный встроенный в функцию.

Ответы [ 2 ]

1 голос
/ 18 октября 2013

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

0 голосов
/ 04 марта 2019
vector<int> compression_params;
compression_params.push_back(IMWRITE_JPEG_QUALITY);
compression_params.push_back(30);<br>
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);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...