使用 Opencv 将 jpg 图像转换为 ppm P3 ASCII 格式

Convert jpg image in ppm P3 ASCII format using 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 图像转换为 ppm 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 时,我得到:不是 256 级的 Netpbm 彩色图像!

当我使用 irfanview 程序将 jpg 转换为 ppm p3 时,工作正常。

涉及的代码在OpenCV源码树的modules/imgcodecs/src/grfmt_pxm.cpp文件中

它根据压缩参数设置内部标志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。