平原PPM格式是如此簡單,它可能需要你只有幾分鐘的時間來編寫代碼創建一個。如果您想使用現有的庫,如果您還安裝freeimage
後端,則可以使用imageio
。然後你可以做如下的事情。
假設a
和b
是兩個陣列。
In [100]: a
Out[100]:
array([[36, 19, 60, 73],
[ 2, 27, 13, 22],
[19, 50, 38, 18],
[47, 69, 55, 52]], dtype=uint8)
In [101]: b
Out[101]:
array([[221, 252, 236, 225],
[248, 254, 226, 248],
[221, 232, 216, 208],
[207, 243, 249, 231]], dtype=uint8)
創建3-d陣列,並複製和a
b
進去。
In [102]: data = np.zeros(a.shape + (3,), dtype=a.dtype)
In [103]: data[:,:,0] = a
In [104]: data[:,:,1] = b
使用imageio.imwrite
創建PPM文件。使用格式PPM-FI
來使用freeimage
後端,並設置flags=1
來創建一個普通的PPM文件(即ASCII,而不是原始的)。
In [105]: import imageio
In [106]: imageio.imwrite('data.ppm', data, format='PPM-FI', flags=1)
這裏的文件:
In [107]: !cat data.ppm
P3
4 4
255
36 221 0 19 252 0 60 236 0 73 225 0 2 248 0
27 254 0 13 226 0 22 248 0 19 221 0 50 232 0
38 216 0 18 208 0 47 207 0 69 243 0 55 249 0
52 231 0
你說你有兩個二維數組,你想「一個普通的PPM圖像」。你的意思是一個包含兩個圖像的ppm *文件*,還是你真的想要將這兩個數組合併成一個圖像? –
一個普通ppm文件來表示來自兩個數組的數據。是的,我應該更具體。說R通道是第一陣列G通道的第二陣列和B設置爲常量?不太確定這是否會起作用這是我問 – ad1v7
的問題還請注意,根據[PPM格式的此描述](http://netpbm.sourceforge.net/doc/ppm.html),一個* plain * PPM文件(帶有「幻數P3」而不是P6)只能包含一個圖像。 –