我有一个很奇怪的错误,
因此,我尝试通过将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/