2016-04-24 66 views
-1

我爲我的函數使用了四個輸入:圖片對象,x座標,y座標以及正方形的高度/寬度。我想分別平均圖片的所有紅色,綠色和藍色值。我遇到了RGB像素的累加器變量,並檢查了正方形的邊界。誰能幫我嗎?蟒蛇在正方形區域的平均顏色

from imageTools import * 

p1 = makePicture("flower.jpg") 

def averageColor(pic, xCord, yCord, width): 
    rAcc = 0 
    gAcc = 0 
    bAcc = 0 
    for x in range(xCord, xCord + width): 
     for y in range(yCord, yCord + width): 
      picWidth = getWidth(pic) 
      picHeight = getHeight(pic) 
      if x <= picWidth and y <= picHeight: 
       pixel = getPixel(pic, xCord, yCord) 
       r = getRed(pixel) 
       g = getGreen(pixel) 
       b = getBlue(pixel) 
       rAcc = rAcc + 1 
       gAcc = gAcc + 1 
       bAcc = bAcc + 1 
    avgRed = r/rAcc 
    avgGreen = g/gAcc 
    avgBlue = b/bAcc 
    newColor = makeColor(avgRed, avgGreen, avgBlue) 
    return newColor 

col1 = averageColor(p1, 0, 150, 100) 
print(col1) 
+1

是不是你應該*求和'r','g'和'b'值, r + = getRed(像素)'等等...... –

+0

你有什麼樣的錯誤?您將像素值分配給每個像素的'r','g'和'b',然後在最後只做一次計算? –

+0

我不想要rg和b值的平均值,我想要使用該區域的平均顏色來形成新的顏色 –

回答

0

你想用<,而不是< =因爲索引是從零開始的比較索引時。例如,如果圖片的寬度爲10個像素,則9是最後一個像素的索引

此外,您正在覆蓋積累變量r,g和b。你需要做

r = r + getRed(...) 

哦。此外,它看起來像你正在嘗試使用xCoord和yCoord來獲取像素而不是你的x和y變量

+0

謝謝你的幫助。我只是想知道爲什麼我仍然得到一個累積器變量引用賦值錯誤之前。 –

+0

如果你永遠不會進入該循環,你將永遠不會分配你的累加器變量 – karina

+0

@SCarey是否足以幫助你自己解決問題? – karina