numpy 多幅图像各通道的平均值

0mkxixxg  于 2022-11-10  发布在  其他
关注(0)|答案(2)|浏览(199)

我想通过存储在数字数组中的所有数据集来计算每个RGB通道的平均值。我知道它是用np.mean完成的,我知道它的基本用法。

np.mean(arr, axis=(??))

但是由于数组有4个维度,我在设置正确的轴时有点迷茫。我找到的所有例子都只涉及一维或二维数组。那么函数调用应该看起来像拥有一个数组,例如(1000, 512, 512, 3)吗?

2vuwiymt

2vuwiymt1#

对于一般的ndarray,您可以创建一个元组来覆盖除与颜色通道对应的最后一个轴之外的所有轴,然后将其用于axis参数和np.mean,如下所示-

np.mean(a, axis=tuple(range(a.ndim-1)))

针对循环理解版本进行验证的样例运行-

In [141]: np.random.seed(0)

In [142]: a = np.random.rand(4,5,6,7,3)

In [143]: [a[...,i].mean() for i in range(a.shape[-1])]
Out[143]: [0.50479333735828591, 0.49485716677174307, 0.51110772176772712]

In [144]: np.mean(a, axis=tuple(range(a.ndim-1)))
Out[144]: array([ 0.50479334,  0.49485717,  0.51110772])

或者,我们可以重塑到2D,并沿着第一个轴找到mean-

In [145]: a.reshape(-1,a.shape[-1]).mean(0)
Out[145]: array([ 0.50479334,  0.49485717,  0.51110772])
lh80um4z

lh80um4z2#

对初学者(像我一样)的解释:我也有同样的问题,我花了一段时间才解决。基本上是为了处理图像:

mean= np.mean(images, axis=(0,1,2))

有了这一点,你真正想说的是“我想要为每一张图像获取每个通道的高度和宽度,并计算它的平均值”。因此,形状(3)表示所有数据集中都有红色、蓝色和绿色的平均值。

相关问题