Python 有没有办法将两个2D numpy阵列保存为一个普通ppm图像?
我正在寻找一种将两个2D numpy数组(如果可能的话)保存到一个普通ppm图像中的方法。 我认为标准(原始)和普通ppm图像之间的唯一区别是后者将行长度限制为70个字符 我能想到的唯一方法是将每个阵列保存到单独的颜色通道。第一个数组表示为红色,第二个数组表示为绿色,蓝色表示为0?虽然不确定这是否有意义 理想情况下,ppm文件将由“人类可读”(而不是数据缓冲区)创建。 我知道scipy可以将其保存为原始ppm(但不是人类可读的)Python 有没有办法将两个2D numpy阵列保存为一个普通ppm图像?,python,arrays,numpy,ppm,Python,Arrays,Numpy,Ppm,我正在寻找一种将两个2D numpy数组(如果可能的话)保存到一个普通ppm图像中的方法。 我认为标准(原始)和普通ppm图像之间的唯一区别是后者将行长度限制为70个字符 我能想到的唯一方法是将每个阵列保存到单独的颜色通道。第一个数组表示为红色,第二个数组表示为绿色,蓝色表示为0?虽然不确定这是否有意义 理想情况下,ppm文件将由“人类可读”(而不是数据缓冲区)创建。 我知道scipy可以将其保存为原始ppm(但不是人类可读的) 欢迎任何想法简单的PPM格式非常简单,您可能只需要几分钟就可以编写
欢迎任何想法简单的PPM格式非常简单,您可能只需要几分钟就可以编写代码来创建一个。如果您更愿意使用现有的库,那么如果您还安装了
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 [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
你说你有两个2D阵列,你想要“一个普通的ppm图像”。您是指一个包含两个图像的ppm文件,还是真的要将两个数组组合起来创建一个图像?一个普通ppm文件表示来自两个数组的数据。是的,我应该说得更具体些。假设R通道用于第一个阵列,G通道用于第二个阵列,B设置为常数?我不太确定它是否会起作用,这是我提问的方式。还请注意,根据,一个普通的PPM文件(用“幻数”P3而不是P6)只能包含一个图像。是的,这是正确的,但请参见前面的评论。请将该评论中的信息放入问题本身。没有它,问题就不完整。
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