这些 PGM 文件是如何编码的?

How are these PGM files encoded?

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

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

根据PGM Specification,header包含图像的"magic number"、宽度、高度和最大值。

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

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

感谢您的帮助。

你误读了规范。

Each gray value is represented in pure binary by either 1 or 2 bytes. If the Maxval is less than 256, it is 1 byte. Otherwise, it is 2 bytes. The most significant byte is first.

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

我认为您正在阅读 "plain" 格式的定义(幻数 P2),但是您有一个 "raw" PBM 文件(幻数 P5)。您可能希望通过 pnmtopnm -plain 管道访问 ASCII 格式编码。