2016-04-24 17 views
-1

Ich verwende vier Eingänge für meine Funktion: ein Bildobjekt, X-Koordinate, Y-Koordinate und die Höhe/Breite des Quadrats. Ich möchte alle Rot-, Grün- und Blauwerte des Bildes separat mitteln. Ich habe Probleme mit den Akkumulatorvariablen der RGB-Pixel und überprüfe die Grenzen des Quadrats. Kann mir jemand helfen?Python durchschnittliche Farbe über quadratischen Bereich

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

sind nicht die Summe der 'r',' g' und 'b' Werte r + = getRed (Pixel) 'und so weiter ... –

+0

Erhalten Sie irgendeine Art von Fehler? Sie geben den Pixelwert für jedes Pixel an "r", "g" und "b" und führen am Ende nur eine Berechnung durch? –

+0

Ich möchte nicht den Durchschnitt der rg und b Werte, ich möchte eine neue Farbe mit der durchschnittlichen Farbe über die Region –

Antwort

0

Sie wollen < verwenden und nicht < = wenn Indizes zu vergleichen, weil Indizes Null basieren. Wenn zum Beispiel das Bild 10 Pixel breit ist 9 ist der Index zum letzten Pixel

Auch Sie überschreiben Ihre Akkumulationsvariablen r, g und b. Sie müssen

r = r + getRed(...) 

oh machen. Auch sieht es so aus, als ob Sie versuchen, xCoord und yCoord zu verwenden, um das Pixel zu erhalten, anstatt Ihre x- und y-Variablen

+0

Vielen Dank für Ihre Hilfe. Ich frage mich nur, warum ich immer noch eine Akkumulatorvariable bekomme, auf die vor dem Zuweisungsfehler verwiesen wird. –

+0

Wenn Sie nie in diese Schleife kommen, werden Sie niemals Ihre Akkumulatorvariablen zuweisen – karina

+0

@SCarey war das genug, um Ihnen zu helfen, es selbst herauszufinden? – karina