PPM、PGM、PBM圖像格式剖析


今天突然需要用到PPM這個圖像文件格式,之前沒見過,在此記錄一下。

PPMPGMPBM這三個圖像文件格式很少見,其實也不難,分別用於彩色圖像、灰度圖像、二值圖像。這里以PPM格式為例。

PPM格式有兩種類型:字節碼和ASCII。前者是二進制文件,后者是純文本文件。

使用convert命令可以將圖像轉為PPM格式:

# 字節碼
$ convert xxx.jpg xxx.ppm
# ASCII
$ convert xxx.jpg -compress none xxx.ppm

ASCII類型的PPM文件示例:

P3
1305 1305
255
229 232 237 228 231 236 ...

第1行是P3,第2行是圖像大小,第3行是最大值,一般是255。從第4行起就是每個像素的顏色值了,像素順序一般是從左到右、從上到下,通道順序一般是RGB。

字節碼類型的PPM文件示例:

50 36 0A 31 33 30 35 20 31 33 30 35 0A 32 35 35 0A E5 E8 ED E4 E7 EC ...

最開始的50 36對應ASCII為P631 33 30 35對應ASCII為130532 35 35對應ASCII為255。后面的像素值以十六進制表示:

$ bc -q
obase=10
ibase=16
E5
229
E8
232
ED
237

Python的Pillow庫可以讀取、存儲字節碼類型的PPM格式:

from PIL import Image

# 存儲PPM格式
im = Image.open('xxx.jpg')
im.save('xxx.ppm')

# 讀取PPM格式
im = Image.open('xxx.ppm')
im.show()

PGM頭部用P2P5分別表示ASCII類型和字節碼類型;PBM頭部用P1P4分別表示ASCII類型和字節碼類型,但沒有像PPM第3行的最大值,ASCII類型的像素值都是0或1。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM