Мне было интересно, есть ли способ легко указать коэффициент сжатия при сжатии изображений в 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 я могу передать в функцию явно определенный встроенный вектор.
2 ответа
Как и предполагалось, активация C ++ 0x позволяет мне передать вектор, явно определенный встроенным в функцию. Это решило проблему.
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);
Похожие вопросы
Связанные вопросы
Новые вопросы
c++
C ++ - это язык программирования общего назначения. Первоначально он был разработан как расширение C и имеет аналогичный синтаксис, но теперь это совершенно другой язык. Используйте этот тег для вопросов о коде (который должен быть) скомпилирован с помощью компилятора C ++. Используйте тег для конкретной версии для вопросов, связанных с конкретной версией стандарта [C ++ 11], [C ++ 14], [C ++ 17], [C ++ 20] или [C ++ 23] и т. Д. .