无法读取正确的 PGM 像素值
cannot read correct pgm pixel values
我有一个非常奇怪的错误,
所以我尝试通过将 pgm 图像的像素值加载到数组中来读取它,我能够正确读取其版本、高度、宽度和最大可能的像素值。但是,当我开始读取像素值时,我总是得到 0。(我知道它不是零,因为我可以在 matlab 中使用 imread 读取它,但必须在 c++ 中实现它,而且我不能使用 opencv 库,所以......
此外,当我像NotePad++一样阅读pgm文件时,前几行很好地代表了有关此图像的信息,但是,实际的像素值是不可读的。我想知道我是否需要某种解析来读取 pgm 图像?它的版本是p5。
谢谢!
你必须有一个任务要解决,因为没有理智的理由实现PGM阅读器。
有两种不同的 PGM 格式:ASCII 和二进制。您似乎期望ASCII PGM,但您拥有的是二进制的。
看看规格:http://netpbm.sourceforge.net/doc/pgm.html
它说:
/1.用于标识文件类型的"幻数"。PGM 图像的 幻数是两个字符"P5"。
[...]
/9.高度行的栅格,按从上到下的顺序排列。每行 由宽度灰色值组成,按从左到右的顺序排列。每个灰色 值是从 0 到 Maxval 的数字,其中 0 表示黑色,Maxval 是白人。每个灰度值都以纯二进制表示,由 1 或 2 个字节。如果 Maxval 小于 256,则为 1 个字节。 否则,它是 2 个字节。最高有效字节是第一个。
您期望的格式在下面进一步描述为纯 PGM 格式。它的魔术数字是"P2"。
相关文章:
- 如何在不产生任何垃圾的情况下获得C中的像素
- 在C++中使用GDAL可以将图像的像素坐标转换为lat,long吗
- 如何在24位SDL_Surface上设置像素的颜色
- 如何从SDL_Surface获取特定像素的颜色
- 如何将CMSampleBufferRef/CIImage/UIImage转换为像素,例如uint8_t[]
- 在C++中查找像素 RGB 数据的最快方法是什么?
- 是否可以从 OpenGL 缓冲区获取原始大小的像素?
- 选择基于另一个垫子的非零像素的cv::Mat的一部分?
- 如何使用 sdl2 快速绘制像素网格?
- 如何在C++中进行像素操作? - Linux
- 他们如何将红外锁定像素转换为镜头前方 1m 的正常平面上的位置
- 访问随机图像像素的快速方法,最多一次
- OpenCV 像素访问点与 at() - 不同的值
- 如何使用 freetype2 访问单色位图中的像素状态
- 尝试渲染像素坐标时,简单线条渲染失败
- 计算另一个图像像素满足条件的像素值的平均值
- 如何返回定义良好的内存部分?例如来自图像数据的像素的颜色值
- 在Qt-cpp中通过像素获取QString的子字符串
- 在 C++ 和 MATLAB 中获取不同的 PGM 像素值结果
- 无法读取正确的 PGM 像素值