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

C++ 这些PGM文件是如何编码的?,c++,matlab,image-processing,text,pgm,C++,Matlab,Image Processing,Text,Pgm,我使用MATLAB(和OpenCV)将灰度图像导出为PGM,并将其作为输出 im = imread(src); im = rgb2gray(im); imwrite(im, dst); 根据标题,标题包含“幻数”、图像的宽度、高度和最大值 但是在标题下面,应该有一个用明文书写的灰度强度值矩阵。但正如您在粘贴的文件中所看到的,我只是得到了一些垃圾(尽管它是一个完全有效的、可查看的图像) 我希望能够读取PGM文件,并使用C/C++程序以整数形式访问各个强度值,但我不知道如何

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

    im = imread(src);
    im = rgb2gray(im);
    imwrite(im, dst);
根据标题,标题包含“幻数”、图像的宽度、高度和最大值

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

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


谢谢您的帮助。

您误读了规范

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


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

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

“在标题下面,应该有一个以明文形式写入的灰度强度值矩阵”根据谁?您是对的-我也照字面上的意思取了这个例子。这里有更好的描述。。。您是指“普通PGM”部分中描述“相当罕见的PGM格式的另一个版本”的示例吗PLZ2阅读整个文档,而不仅仅是选择部分文档