С помощью функции 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 работает.
Используемый код находится в файле 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.