Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/image-processing/2.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++ 无法读取正确的pgm像素值_C++_Image Processing_Pgm - Fatal编程技术网

C++ 无法读取正确的pgm像素值

C++ 无法读取正确的pgm像素值,c++,image-processing,pgm,C++,Image Processing,Pgm,我有一个很奇怪的错误 因此,我试图通过将pgm图像的像素值加载到数组中来读取pgm图像,我能够正确读取其版本、高度、宽度和最大可能像素值。然而,当我开始读取像素值时,我总是得到0。(我知道它不是零,因为我可以在MATLAB中使用它读取它,但是必须在C++中实现它,加上我不能使用OpenCV库…..) 此外,当我在NotePad++中读取pgm文件时,前几行很好地代表了关于这个图像的信息,然而,实际的像素值是不可读的。我想知道我是否需要某种解析来读取pgm图像?它的版本是p5 谢谢 您必须有一个任

我有一个很奇怪的错误

因此,我试图通过将pgm图像的像素值加载到数组中来读取pgm图像,我能够正确读取其版本、高度、宽度和最大可能像素值。然而,当我开始读取像素值时,我总是得到0。(我知道它不是零,因为我可以在MATLAB中使用它读取它,但是必须在C++中实现它,加上我不能使用OpenCV库…..) 此外,当我在NotePad++中读取pgm文件时,前几行很好地代表了关于这个图像的信息,然而,实际的像素值是不可读的。我想知道我是否需要某种解析来读取pgm图像?它的版本是p5


谢谢

您必须有一个任务要解决,否则就没有合理的理由实现PGM读取器

有两种不同的PGM格式:ASCII和二进制。您似乎期望使用ASCII PGM,但您使用的是二进制

请查看规格:

它说:

/一,。用于标识文件类型的“幻数”。pgm图像的 幻数是两个字符“P5

[……]

/九,。高度行的光栅,按从上到下的顺序排列。每行 由宽度灰度值组成,按从左到右的顺序排列。每个灰色 值是从0到Maxval的数字,0为黑色,Maxval为白色 是白人每个灰度值在纯二进制中表示为 1或2个字节。如果Maxval小于256,则为1个字节。 否则,它是2个字节。最重要的字节是第一个


您期望的格式在下面进一步描述为普通PGM格式。它的神奇数字是“P2”。

哦,这就是为什么……谢谢!我没听清楚,它说它可以用两种方式表示…嗨,我试着用一个简单的静态像素将ascii转换成int,但它似乎不起作用,你知道为什么吗?你必须确保每个像素只读取一个字符,正确的数据类型应该是
unsigned char
。是的,这就是我现在正在做的…我正在使用unsigned char,然后将其转换为unsigned int…但是与我在matlab中使用imread读取的值相比,我有时得到相同的,有时是非像素值…我完全不知道。。