首页 > 解决方案 > 这些 PGM 文件是如何编码的?

问题描述

我使用 MATLAB(和 OpenCV)将灰度图像导出为 PGM,并将该文件作为输出。

    im = imread(src);
    im = rgb2gray(im);
    imwrite(im, dst);

根据PGM 规范,标题包含图像的“幻数”、宽度、高度和最大值。

但在标题下方,应该有一个以明文形式编写的灰度强度值矩阵。但是正如您在粘贴的文件中看到的那样,我只是得到了一些垃圾(尽管它是一个完全有效的、可查看的图像)

我希望能够读取 PGM 文件并使用 C/C++ 程序将单个强度值作为整数访问,但我不知道如何解释此输出,因为它不符合规范。也许文本编码不同?

感谢您的任何帮助。

标签: c++matlabimage-processingtextpgm

解决方案


你误读了规范。

每个灰度值用 1 或 2 个字节以纯二进制形式表示。如果 Maxval 小于 256,则为 1 个字节。否则,它是 2 个字节。最重要的字节是第一个。

所以每个像素是一个或两个字节(取决于 Maxval)并且是二进制的,而不是 ASCII。


推荐阅读