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

时间:2015-06-05 10:28:42

标签: c++ opencv jpeg ppm

使用opencv imwrite功能我设法以ppm P6格式转换jpg图像。

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);

问题是我实际上必须以ppm P3 ASCII格式转换jpg图像。 有谁知道怎么做? 谢谢!

编辑:

在项目中,我有以下代码,我检查像素的最大值:

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的转换时。

1 个答案:

答案 0 :(得分:0)

所涉及的代码位于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。