使用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的转换时。
答案 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。