Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/cocoa/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 有没有办法将两个2D numpy阵列保存为一个普通ppm图像?_Python_Arrays_Numpy_Ppm - Fatal编程技术网

Python 有没有办法将两个2D numpy阵列保存为一个普通ppm图像?

Python 有没有办法将两个2D numpy阵列保存为一个普通ppm图像?,python,arrays,numpy,ppm,Python,Arrays,Numpy,Ppm,我正在寻找一种将两个2D numpy数组(如果可能的话)保存到一个普通ppm图像中的方法。 我认为标准(原始)和普通ppm图像之间的唯一区别是后者将行长度限制为70个字符 我能想到的唯一方法是将每个阵列保存到单独的颜色通道。第一个数组表示为红色,第二个数组表示为绿色,蓝色表示为0?虽然不确定这是否有意义 理想情况下,ppm文件将由“人类可读”(而不是数据缓冲区)创建。 我知道scipy可以将其保存为原始ppm(但不是人类可读的) 欢迎任何想法简单的PPM格式非常简单,您可能只需要几分钟就可以编写

我正在寻找一种将两个2D numpy数组(如果可能的话)保存到一个普通ppm图像中的方法。 我认为标准(原始)和普通ppm图像之间的唯一区别是后者将行长度限制为70个字符

我能想到的唯一方法是将每个阵列保存到单独的颜色通道。第一个数组表示为红色,第二个数组表示为绿色,蓝色表示为0?虽然不确定这是否有意义

理想情况下,ppm文件将由“人类可读”(而不是数据缓冲区)创建。 我知道scipy可以将其保存为原始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