这些 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 格式编码。
我使用 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 格式编码。