我已经使用PIL / OpenCV加载了RGB图像,我想将其所有通道转换为单个1x(3 *宽*高)序列,以便将其提供给ANN。我发现我可以做到:
rlist = []
glist = []
blist = []
for i in xrange(im.width):
for j in xrange(im.height):
r,g,b = im[i,j]
rlist.append(r)
glist.append(g)
blist.append(b)
img_vec = rlist + blist + glist
但显然这是非常低效的。有一些内部OpenCV / numpy例程有更快的方法吗?
答案 0 :(得分:7)
作为一个简单的例子:
import Image
import numpy as np
im = Image.open('temp.png')
data = np.array(im)
flattened = data.flatten()
print data.shape
print flattened.shape
这会产生:
(612, 812, 4)
(1987776,)
或者,您可以拨打data.flatten()
,而不是拨打data.reshape(-1)
。 -1
用作占位符,用于“确定给定维度应该是什么”。
请注意,这会生成flattened
的向量(r0, g0, b0, r1, g1, b1, ... rn, gn, bn
),而您需要r0, r1 ... rn, b0, b1, ... bn, g0, g1, ... gn
的向量。
要获得您想要的内容,请致电
flattened = data.T.flatten()
代替。