【问题标题】:cannot read correct pgm pixel values无法读取正确的 pgm 像素值
【发布时间】:2013-11-15 03:44:50
【问题描述】:

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

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

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

谢谢!

【问题讨论】:

    标签: c++ image-processing pgm


    【解决方案1】:

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

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

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

    上面写着:

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

    […]

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

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

    【讨论】:

    • 哦,这就是为什么...谢谢!我没有理解它说它可以用两种方式表示的那部分......
    • 您好,我尝试使用简单的 static_castpixel 将 ascii 转换为 int,但它似乎不起作用,您知道为什么不吗?
    • 您必须确保每个像素只读取一个字符,并且正确的数据类型是unsigned char
    • 是的,这就是我现在正在做的事情......我正在使用 unsigned char 并将其转换为 unsigned int ......但是我有时会得到相同的像素值,有时与像素值相比我在 matlab 中使用 imread 阅读...我完全一无所知..
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-07-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多