无法读取正确的 PGM 像素值

cannot read correct pgm pixel values

本文关键字:PGM 像素 读取      更新时间:2023-10-16

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

所以我尝试通过将 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 个字节。最高有效字节是第一个。

您期望的格式在下面进一步描述为纯 PGM 格式。它的魔术数字是"P2"。