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



我使用MATLAB(和OpenCV(将灰度图像导出为PGM,并得到这个文件作为输出。

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

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

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

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

感谢您的任何帮助。

你误读了规范。

每个灰度值以纯二进制表示,由 1 或 2 个字节表示。如果 Maxval 小于 256,则为 1 个字节。否则,它是 2 个字节。最高有效字节是第一个。

因此,每个像素要么是一个字节,要么是两个字节(取决于Maxval(,并且是二进制的,而不是ASCII。

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

相关内容

最新更新