展平OpenCV / Numpy阵列

时间:2011-10-13 14:28:21

标签: python opencv numpy

我已经使用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例程有更快的方法吗?

1 个答案:

答案 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()

代替。