【问题标题】:How to append the list's values to a 3D array - python and opencv如何将列表的值附加到 3D 数组 - python 和 opencv
【发布时间】:2014-03-23 09:08:11
【问题描述】:

由于我对opencv知之甚少,所以这个问题可能很愚蠢。 无论如何,我的问题是,我有一组 30 张图像,我正在计算所有 30 张图像的红色、绿色和蓝色通道的平均值,并将它们存储在 3 个不同的列表中,现在我想要附加这 3 个不同的列表值转换为 3D 数组:

[B_mean,
 G_mean,
 R_mean]

这是我的 BGR 平均值:

blue mean [25, 28, 66, 63, 59, 70, 64, 38, 33, 39, 22, 37, 48, 4, 13, 12, 6, 3, 22, 18, 23, 21, 22, 31, 38, 21, 34, 26, 21, 30]
green mean [27, 29, 68, 66, 63, 69, 66, 45, 48, 41, 38, 41, 41, 22, 21, 9, 7, 25, 35, 28, 37, 36, 35, 32, 36, 20, 27, 24, 18, 25]
read mean [25, 26, 70, 69, 71, 67, 66, 42, 45, 31, 40, 43, 37, 32, 33, 37, 30, 34, 34, 24, 28, 32, 30, 33, 36, 26, 24, 30, 24, 26]

比如 3 行 30 列。那我怎么得到这个?

谢谢!

【问题讨论】:

  • 听起来你想要一个二维数组,即 (3, 30) 数组。 3d 数组的形状类似于 (2, 3, 30)。

标签: python list opencv numpy multidimensional-array


【解决方案1】:

只需使用numpy.array:

import numpy as np

red = range(0, 30)
blue = range(10, 40)
green = range(20, 50)
array = np.array([red, green, blue])
print array.shape
# (3, 30)

【讨论】:

    【解决方案2】:

    如果你只有行和列,它实际上是一个二维数组。

    mylist = [[1,2,3], [1,2,3]]
    mylist.append([1,2,3])
    

    在这种情况下,这将创建一个包含三个 RGB 对(1、2、3)的列表。

    编辑

    重新阅读您的问题后,更具体的解决方案是(给定三个颜色列表):

    mylist = []
    for i in range(0, 30):
       mylist.append([red[i], green[i], blue[i]])
    

    【讨论】:

      【解决方案3】:
      matrix = [[mean for mean in chan]  for chan in [red, green, blue]]
      

      这是在 Python 中初始化多维数组的方式。

      编辑:我应该提到,使用 numpy 是首选方式,除非你正在编写一次性使用的东西。

      【讨论】:

        猜你喜欢
        • 2020-03-13
        • 1970-01-01
        • 1970-01-01
        • 2018-03-05
        • 2014-06-07
        • 2017-03-07
        • 1970-01-01
        • 1970-01-01
        • 2017-11-19
        相关资源
        最近更新 更多