无法读取正确的pgm像素值

时间:2013-11-15 03:44:50

标签: c++ image-processing pgm

我有一个非常奇怪的错误,

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

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

谢谢!

1 个答案:

答案 0 :(得分:2)

你必须有一个要解决的任务,否则没有理由实施PGM阅读器。

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

查看规范:http://netpbm.sourceforge.net/doc/pgm.html

它说:

  

/ 1。 A"幻数"用于标识文件类型。一个pgm图像   幻数是两个字符" P5 "。

     

[...]

     

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

您期望的格式将在下面进一步描述为 Plain PGM 格式。它的神奇数字是" P2"。