2012-08-31 26 views
1

我想實現這個功能:計算圖像的平均值(或總和)rgb值。更具體地說,圖像由一個元組的二維數組組成。這裏是我的代碼:Python:遍歷一個子2d(嵌套)數組來計算其總和

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 

問題如何美化它,或使其更Python?也許嵌套map仍然不是最好的。我希望這就像使用itertools

這個link提供了一個接近我的問題的解決方案。另一個link是我的代碼可能的重複,但他不問同一個問題。

非常感謝。

編輯 我其實希望計算一個子二維數組的總和。

+1

你想要平均值還是總和?他們不一樣。 – Makoto

+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) 

對於o太平洋版本的PIL使用numpy.asarray

如果要計算一個子陣的總和,你可以使用像這樣得到那個子陣:

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

參考

+0

它是否提供了這樣的功能來計算子二維數組的總和? –

+2

是的 - 只要做np_pix [X_start:X_end,Y_start:Y_end]來獲得你想要的子陣列。 –