该解决方案比 cmets 和 answers 中提供的解决方案要简单得多——即,无需对元组进行计算,也无需使用嵌套循环来迭代单元格值。
具体来说,如果您有一个灰度图像,那么您有一个二维数组,其中数组单元填充了从 0 到 1 的标量值。
相比之下,彩色图像是一个 2D NumPy 数组,其中一个 rgb 元组位于每个单元格中。
换一种说法:灰度图像的 NumPy 数组表示是一个二维数组,其单元格的浮点值介于 0(黑色)和 1(白色)之间
鉴于此,您可以通过沿图像数组的两个轴计算平均值来计算平均像素值,如下所示:
>>> import numpy as NP
>>> img = NP.random.rand(100, 100)
>>> img[:5, :5]
array([[ 0.824, 0.864, 0.731, 0.57 , 0.127],
[ 0.307, 0.524, 0.637, 0.134, 0.877],
[ 0.343, 0.789, 0.758, 0.059, 0.374],
[ 0.693, 0.991, 0.458, 0.374, 0.738],
[ 0.237, 0.226, 0.869, 0.952, 0.948]])
这一行代码会做你想做的——计算平均值两次,数组中的每个轴一次(不需要为第二次调用 mean 指定一个轴,因为返回第一次调用的值只是一个一维数组
>>> img.mean(axis=0).mean()
0.50000646872609511
0.5 的值似乎是正确的,因为数组值是通过调用 NP.random.rand 生成的,它返回从半开区间 [0, 1) 上的均匀分布采样的值
>>> import matplotlib.pyplot as MPL
>>> MPL.imshow(img, cmap=MPL.cm.gray, interpolation='nearest')
>>> MPL.show()