NumPy和PIL重新调整数组

4

pil转numpy会得到如下数组:

a = array([ [[r,g,b],[r,g,b].....[r,g,b],[r,g,b]]  ,  [[r,g,b],[r,g,b.....]] , int8)

RGB值的三元组放置在行内,如下所示:
a[0] = [[r,g,b],[r,g,b].....[r,g,b],[r,g,b]] = first row

有没有一种快速的方法将这样的三元组numpy数组转换回去(尤其是回去)?
a = [[rrrr],[rrrrr],[rrrrr],.... [bbbbb],[bbbbbb],[bbbbbb]...,[ggggg],[ggg],[ggg]]

或者

a=[[rrr],[rrrrr],[....    ...]] **or** aa = [rrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr..]

b=[[bbb],[bbbbb],[....    ...]]**or** bb = [bbbbbbbbbbbbbbbbbbbbbbbbbb..]

c=[[ggg],[ggggg],[....      .]] **or** cc = [ggggggggggggggggggggggggg..]

我的问题是,我有一个格式为aa bb cc的图片,并且知道它的大小为640x480,如何快速将其转换为以下形式的pill格式。

a = array([ [[r,g,b],[r,g,b].....[r,g,b],[r,g,b]]  ,  [[r,g,b],[r,g,b.....]] , int8)
2个回答

4

a.T 能够给你想要的结果吗?

我假设您使用了numpy的asarray函数创建了数组。

import Image, numpy
im = Image.open('test.png')
a = numpy.asarray(im)
R,G,B,A = a.T

上面的代码将为您提供4个单独的2D数组,每个数组代表一个波段。

0

啊呼,答案有效,我可以打出来...好的

实际上,我没有使用asarray,因为我是在相反的方向工作(asarry创建三元组),我的数据以通道形式存在。所以红色、绿色和蓝色;我的数据看起来像这样 a = [r,r,r,r,r,r,r,r,r ...] 其中r是一个一维数组中的所有红色值,事实上,这个通道图像是红色的。

b = 所有的蓝色,c是所有的绿色。 所以我拥有的格式不是三元组。 我想知道是否有一个快速的组合函数来生成这样的三元组。事实上,Pil在数组内部使用数组,我正在看Pil,但如果pygame或其他东西可以向我展示从通道中选择是可以的,PIL不是必需品;但似乎所有格式都使用三元组;而我的数据并不包含它。由于Numpy是我所知道的最重要的数组库,我想知道它是否可以进行这样的数组操作,

很遗憾我不能在这里画图来解释我想要的,我有像a、b和c这样的东西

a = [123123123132]

b = [989898389398]

c = [343434343434]

d[a,b,c] = a[] + b[] + c[] >>> 这不是Python代码,这是我的思考代码

所以d变成了d[[a,b,c],[a,b,c],[a,b,c], ... ..]

而且d[0] = [1,9,3]


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接