【问题标题】:Flatten OpenCV/Numpy Array展平 OpenCV/Numpy 数组
【发布时间】:2011-10-13 14:28:20
【问题描述】:

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

【问题讨论】:

  • ANN == 人工神经网络

标签: python opencv numpy


【解决方案1】:

举个简单的例子:

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.reshape(-1),而不是调用data.flatten()-1 用作“找出给定尺寸应该是什么”的占位符。

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

要得到你想要的,只需调用

flattened = data.T.flatten()

改为。

【讨论】:

  • 你确定 data.T.flatten() 吗?我的测试表明 data.flatten() 按顺序返回数据 [r1,r2...,g1,g2,...b1,b2...] 而 data.T.flatten() 按顺序返回 [r1 ,g1,b1,r2,g2,b2,...]。但是,我使用简单的 numpy 数组进行了测试,而不是实际的图像。
猜你喜欢
  • 2016-02-16
  • 2014-08-29
  • 2020-04-27
  • 2016-08-26
  • 2015-04-03
  • 2019-08-26
  • 2020-07-29
  • 2015-03-14
  • 2019-01-11
相关资源
最近更新 更多