Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/124.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 使用Opencv将jpg图像转换为ppm P3 ASCII格式_C++_Opencv_Jpeg_Ppm - Fatal编程技术网

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

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

使用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时,我得到:不是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)