我正在寻找一种方法来保存(如果可能的话,有效)两个2D numpy阵列到一个普通的ppm图像。 我认为标准(原始)和普通ppm图像之间的唯一区别是后者将行长度限制为70个字符。
我能想到的唯一方法是将每个阵列保存为单独的颜色通道。假设第一个数组为红色,第二个为绿色,并将蓝色保留为0?虽然不确定是否有意义......
理想情况下,ppm文件将由人类可读的' (不是数据缓冲区)。 我知道scipy可以将其保存为原始ppm(但不是人类可读的)
欢迎任何想法
答案 0 :(得分:1)
纯PPM格式非常简单,只需几分钟即可编写代码来创建一个。如果您更愿意使用现有库,则可以使用imageio
,如果您还安装了freeimage
后端。然后你可以做类似以下的事情。
假设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)
创建一个三维数组,并将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