我有一个很奇怪的错误,

因此,我尝试通过将pgm图像的像素值加载到数组中来读取它,从而能够正确读取其版本,高度,宽度和最大可能像素值。但是,当我开始读取像素值时,我总是得到0。(我知道它不为零,因为我可以使用matlab中的imread来读取它,但是必须在c ++中实现它,而且我不能使用opencv库。 )

此外,当我以NotePad ++之类读取pgm文件时,前几行很好地表示了有关此图像的信息,但是实际的像素值却无法读取。我想知道是否需要某种解析来读取pgm图像?它的版本是p5。

谢谢!

最佳答案

您必须分配作业来解决,因为没有理智的理由可以实现PGM阅读器。

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

看一下规格:http://netpbm.sourceforge.net/doc/pgm.html

它说:


  / 1。用于标识文件类型的“幻数”。 pgm图像的
  幻数是两个字符“ P5”。
  
  […]
  
  / 9。高度行的栅格,按从上到下的顺序排列。每一行
  由“宽度”灰度值组成,按从左到右的顺序排列。每个灰色
  值是从0到Maxval的数字,0是黑色,Maxval
  是白色的。每个灰度值均以纯二进制形式表示
  1或2个字节。如果Maxval小于256,则为1个字节。
  否则为2个字节。最高有效字节在前。


您期望的格式在下面进一步描述为Plain PGM格式。它的魔幻数字是“ P2”。

关于c++ - 无法读取正确的pgm像素值,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/19993136/

10-09 22:01