PGM(Portable Graymap Format)是一种便携式灰度图像格式,属于Netpbm图像格式家族(还包括PPM彩色图像、PBM二值图像等),因其结构简单、易于解析而被广泛用于计算机视觉、图像处理等领域。
一、PGM格式的核心特点
- 灰度图像专用:仅存储黑白/灰度信息,不包含彩色通道(与RGB格式的彩色图像不同)。
- 两种存储模式:
- ASCII文本格式(P2):像素数据以明文数字表示,人类可直接阅读,文件体积较大。
- 二进制格式(P5):像素数据以二进制字节流存储,文件体积小,解析效率高。
- 跨平台兼容性:格式规范公开且简单,几乎所有图像处理库(如Python的
PIL、OpenCV)都支持读写。
二、PGM文件的结构组成
无论ASCII还是二进制格式,PGM文件都由文件头和像素数据两部分组成:
1. 文件头(Header)
-
魔数(Magic Number):开头必须是
P2(ASCII)或P5(二进制),用于标识格式类型(区分大小写)。 -
图像尺寸:宽度(列数)和高度(行数),以空格或换行分隔。
-
最大灰度值:表示像素的亮度范围(通常为255,即0255对应黑到白),必须是165535之间的整数。
-
注释行:以
#开头的行,可插入说明文字,位于魔数之后、像素数据之前。示例(P2格式文件头):
P2 # 魔数(ASCII格式) # 这是一张测试图片 # 注释行 100 200 # 宽度100,高度200 255 # 最大灰度值255
2. 像素数据
- P2格式:以ASCII文本存储的整数(0~最大灰度值),像素之间用空格、换行或制表符分隔,总数量必须等于“宽度×高度”。
示例(接上面的文件头):0 10 20 30 ... # 第一行像素 50 60 70 80 ... # 第二行像素 ... - P5格式:以二进制字节流存储,直接对应像素的数值(8位灰度值用1字节,16位用2字节,按宽度×高度顺序排列),无法直接用文本编辑器阅读。
三、PGM格式的应用场景
- 计算机视觉算法测试:因其格式简单,常用于验证图像读取、处理(如滤波、边缘检测)等算法的正确性。
- 科学数据可视化:适合存储实验生成的灰度数据(如医学影像中的CT切片、天文观测图像)。
- 教育与调试:ASCII格式的明文特性便于初学者理解图像数据的存储逻辑。
四、如何打开或处理PGM文件
- 图像查看器:专业软件如GIMP、IrfanView、XnView支持直接打开。
- 编程处理:
- Python:用
PIL库(Image.open())或OpenCV(cv2.imread())读取。 - C++:用
OpenCV或自定义解析器(因格式简单,容易手动解析文件头和数据)。
- Python:用
总结
PGM是一种轻量、直观的灰度图像格式,适合对图像数据有直接访问需求的场景。其结构清晰,解析难度低,是学习图像处理或开发相关工具时的常用格式。
4504

被折叠的 条评论
为什么被折叠?



