我想实现这个功能:计算图像的平均值(或总和)rgb
值。更具体地,图像由元组的2-d阵列组成。这是我的代码:
rgb = [0.0, 0.0, 0.0]
for r in range(0, 3):
for ii in range(x, x + X_STEP):
for jj in range(y, y + Y_STEP):
rgb[r] += src_pix[ii][jj][r]
rgb = map(lambda a: a / X_STEP / Y_STEP, rgb) #this line does not matter, it is just the difference between sum and average
问题如何美化它,或使它更加pythonic?也许嵌套的map
仍然不是最好的。我希望它就像使用itertools
。
这个link提供了一个接近我的问题的解决方案。另一个link可能与我的代码重复,但他没有问同样的问题。
非常感谢。
修改 我实际上希望计算一个二维二维数组的总和。
答案 0 :(得分:2)
看起来你正在使用PIL。如果是这样的话,我会使用numpy。
假设您使用的是PIL版本> = 1.1.6,您可以将PIL对象src_pix
转换为numpy数组,如下所示:
np_pix = numpy.array(srx_pix)
然后使用numpy.sum
:
rgb = numpy.sum(np_pix)
或计算平均值(如上面的代码所示):
rgb = numpy.mean(np_pix)
对于旧版本的PIL,请使用numpy.asarray
。
如果要计算子阵列的总和,可以使用 slice 来获取该子阵列,如下所示:
rgb_slice = numpy.mean(np_pix[X_start:X_end,Y_start:Y_end])
<强>参考强>:
PIL and numpy(旧的SO 关于这个主题的帖子)