展平OpenCV/Numpy阵列

Cer*_*rin 6 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
Run Code Online (Sandbox Code Playgroud)

但显然这是非常低效的.有一些内部OpenCV/numpy例程有更快的方法吗?

Joe*_*ton 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
Run Code Online (Sandbox Code Playgroud)

这会产生:

(612, 812, 4)
(1987776,)
Run Code Online (Sandbox Code Playgroud)

或者,data.flatten()你可以打电话,而不是打电话data.reshape(-1). -1用作"找出给定维度应该是什么"的占位符.

请注意,这将产生vector(flattened)r0, g0, b0, r1, g1, b1, ... rn, gn, bn,而您需要一个向量r0, r1 ... rn, b0, b1, ... bn, g0, g1, ... gn.

要得到你想要的,只需打电话

flattened = data.T.flatten()
Run Code Online (Sandbox Code Playgroud)

代替.