2016-05-11 11 views
0

Ich durchlaufe eine Matrix von 300 Pixel (mit Kissen) mit einer for-Schleife für x und y. Am Ende setze ich die Variable: lastPixelAvg = PixelAvg, damit ich sie mit einem neuen Wert vergleichen kann.Python 2.7 Integer Variable ändert sich in for Schleife

Wenn die nächste Iteration beginnt, hat sich der Wert unerwartet geändert. Ich habe alle möglichen Dinge ausprobiert, wie zum Beispiel copy.deepcopy(), da dies etwas damit zu tun haben kann, wie ganze Zahlen zwischen -5 und 255 behandelt werden. Das Zuweisen der Variablen am Anfang und nicht am Ende hilft ebenfalls nicht. Was mache ich falsch?

brightnessShift=False 
deviation=3 
lastPixelAvg=0 
for x in xrange(100,400,10): 
    for y in xrange(200,300,10): 
     xy = (x, y) 
     rgb = img.getpixel(xy) 

     pctR=int(rgb[0]*0.391)  
     pctG=int((rgb[1]-5)*0.391) 
     pctB=int(rgb[2]*0.391) 

     pixelAvg=(pctR+pctG+pctB)/3 
     if not (x==100): 
      print lastPixelAvg # <--- this returns a different value then set at the end, always about 10 higher; for instance 42 
      brightnessShift = ((pixelAvg+deviation*2.5)<=lastPixelAvg) or ((pixelAvg-deviation*2.5)>=lastPixelAvg) #!!deviation * 2.5 
     else: 
      brightnessShift = False 

     lastPixelAvg=pixelAvg # here the value is set to, for instance 30, from pixelAvg 
     print lastPixelAvg # returns 30 
+1

Wie wissen Sie die Werte nicht übereinstimmen? In dem hier veröffentlichten Code protokollieren Sie den Wert nicht an dem Punkt, an dem 'lastPixelAvg' gesetzt wird. Können Sie uns etwas genauer zeigen, was Sie denken lässt, dass sich etwas ändert, das nicht sollte? –

+0

oder Schritt in pdb zu überprüfen – cmh

+0

Ich visualisieren die Ausgabe durch Einfärben von Pixeln im Bild. Ich bemerkte, dass das zweite Pixel bei (x = 110, y = 200) fast immer den BrigtnessShift-Status auf "True" gesetzt hatte. Ich habe versucht, die Variablen an allen möglichen Stellen im Code zu drucken, es ist klar, dass sich der Wert bei der ersten Anweisung nach dem Befehl für y geändert hat. Dies ist nicht der vollständige Code, aber nach diesem Punkt werden keine Werte mehr verwendet (pixelAvg & lastPixelAvg) – Floris

Antwort

0

Danke für die PDB-Tipp. Ich hatte die for-Schleifen falsch herum.

for x in xrange(100,400,10): 
    for y in xrange(200,300,10): 

Sollte sein:

for y in xrange(200,300,10): 
    for x in xrange(100,400,10): 

oder if not (y==200): statt if not (x==100):