展开OpenCV/Numpy数组

2024-06-02 10:54:31 发布

您现在位置:Python中文网/ 问答频道 /正文

我已经加载了一个带有PIL/OpenCV的RGB图像,我想把它的所有通道转换成一个1x(3*width*height)序列,以便将其输入到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例程?


Tags: in图像forpil序列rgbwidthopencv
1条回答
网友
1楼 · 发布于 2024-06-02 10:54:31

举个简单的例子:

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的向量(flattened),而您需要一个r0, r1 ... rn, b0, b1, ... bn, g0, g1, ... gn的向量。

想得到你想要的,就打电话

flattened = data.T.flatten()

相反。

相关问题 更多 >