我有一个非常奇怪的错误,
所以我试图通过将像素值加载到数组中来读取pgm图像,我能够正确读取其版本,高度,宽度和最大可能像素值。但是,当我开始读取像素值时,我总是得到0.(我知道它不是零,因为我可以在matlab中使用imread读取它,但必须在c ++中实现它,而且我不能使用opencv库。 。)
此外,当我在NotePad ++中读取pgm文件时,前几行很好地代表了有关此图像的信息,但实际的像素值是不可读的。我想知道我是否需要某种解析来读取pgm图像?它的版本是p5。
谢谢!
答案 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"。