0

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

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

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

谢谢!

4

1 回答 1

2

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

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

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

它说:

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

[…]

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

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

于 2013-11-15T03:46:55.537 回答