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例程有更快的方法吗?
作为一个简单的例子:
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)
代替.
归档时间: |
|
查看次数: |
10815 次 |
最近记录: |