C++ 使用Opencv将jpg图像转换为ppm P3 ASCII格式
使用opencv imwrite函数,我成功地将jpg图像转换为PPMP6格式C++ 使用Opencv将jpg图像转换为ppm P3 ASCII格式,c++,opencv,jpeg,ppm,C++,Opencv,Jpeg,Ppm,使用opencv imwrite函数,我成功地将jpg图像转换为PPMP6格式 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); 当我设置参数0
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);
当我设置参数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;
并具有图像类型CV_8UC1、CV_8UC3或CV_16UC1。
压缩参数。向后推(0)代码>可能?当我设置参数0时,我得到:不是256级的Netpbm彩色图像(maxVal!=255)。当我设置参数1时,我得到:不是Netpbm ASCII可移植位图。这是更大项目的一部分吗?如果没有,您可以使用ImageMagick(它包含在大多数Linux发行版中,可用于OSX和Windows)在终端中非常简单地将JPEG转换为PPM(P3),如下所示convert input.jpg-compress none output.PPM
这是更大项目代码的一部分。使用其他程序是不可能的。在这个项目中,我有以下代码:intmaxval;fscanf(在、%d、&maxVal中);当我设置参数0时,如果(maxVal!=255){printf(“输入文件错误:不是256级的Netpbm彩色图像\n”);退出(0);}
则我得到:不是256级的Netpbm彩色图像!当我用irfanview程序works将jpg转换为ppm p3时。irfanview开始图像:p3#由irfanview 2560 1920 255 142 126 113创建。。。openCV图片开始:P3 2560 1920 255 142 126 113…你现在让我困惑:-(在评论区很难阅读代码-最好单击问题下方的edit
,并进行更新,以便所有信息的格式都清晰,并放在一个地方。我不明白你为什么要做fscanf()
,当您的问题是写入时,这是一个读取。您的输入图像肯定是8位BGR图像吗?输入图像:2560x1920 RGB图像,位深度=24
for( size_t i = 0; i < params.size(); i += 2 )
if( params[i] == CV_IMWRITE_PXM_BINARY )
isBinary = params[i+1] != 0;
compression_params.push_back(0)