1

我想实现这个功能:计算图像的平均值(或总和)rgb值。更具体地说,图像由元组的二维数组组成。这是我的代码:

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.

这个链接提供了一个接近我的问题的解决方案。另一个链接可能与我的代码重复,但他没有问同样的问题。

非常感谢。

编辑 我实际上希望计算一个子二维数组的总和。

4

1 回答 1

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.

如果要计算子数组的总和,可以使用切片获取该子数组,如下所示:

rgb_slice = numpy.mean(np_pix[X_start:X_end,Y_start:Y_end])

参考资料

于 2012-08-31T14:38:02.143 回答