Конвертируйте изображение jpg в ppm формат P3 ASCII, используя Opencv

С помощью функции opencv imwrite мне удалось преобразовать изображение jpg в формат ppm P6.

Mat image = imread(picPath);

vector<int> compression_params;
compression_params.push_back(CV_IMWRITE_PXM_BINARY);
compression_params.push_back(1);

imwrite("bez.ppm", image, compression_params);

Проблема в том, что мне действительно нужно конвертировать изображение в формате JPG в формате p3 P3 ASCII.
кто нибудь знает как это сделать?
Спасибо!

РЕДАКТИРОВАТЬ:

В проекте у меня есть следующий фрагмент кода, где я проверяю максимальное значение пикселей:

int maxVal;
fscanf(in, "%d", &maxVal);
if (maxVal != 255)
{
printf("Input file error: Not a Netpbm color image with 256 levels\n");
exit(0);
}

Когда я устанавливаю параметр 0, я получаю: Не цветное изображение Netpbm с 256 уровнями!

Когда я делаю преобразование из jpg в ppm, p3 с программой irfanview работает.

0

Решение

Используемый код находится в файле modules/imgcodecs/src/grfmt_pxm.cpp в исходном дереве OpenCV.

Устанавливает внутренний флаг isBinary вот так по параметрам сжатия:

for( size_t i = 0; i < params.size(); i += 2 )
if( params[i] == CV_IMWRITE_PXM_BINARY )
isBinary = params[i+1] != 0;

Итак, если вы хотите ASCII (P3), вам нужно иметь

compression_params.push_back(0)

и имеют тип изображения CV_8UC1, CV_8UC3 или CV_16UC1.

0

Другие решения


По вопросам рекламы [email protected]