2016-05-11 44 views
0

我运行一个300像素的矩阵(使用Pillow),for循环用于x和y。最后我设置了变量:lastPixelAvg = PixelAvg,所以我可以将它与新值进行比较。python 2.7 for循环中的整型变量变化

当下一次迭代开始时,该值意外地发生了变化。我尝试了各种各样的东西,比如copy.deepcopy(),因为这可能与处理-5到255之间的整数的方式有关。在开始而不是结束时分配变量也无济于事。我究竟做错了什么?

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

你怎么知道的值不匹配?在这里发布的代码中,您没有在lastPixelAvg被设置的位置记录该值。你能否更详细地向我们展示是什么让你觉得事情正在发生改变? –

+0

或在pdb中进行检查以检查 – cmh

+0

我通过在图像中着色像素来可视化输出。我注意到第二个像素(x = 110,y = 200)几乎总是将brigtnessShift状态设置为true。我尝试在代码中的各种位置打印变量,很明显,在for命令之后的第一条指令处,值已经改变。这不是完整的代码,但在这一点之后都没有使用任何值(pixelAvg&lastPixelAvg) – Floris

回答

0

感谢您的pdb提示。我有错误的方式循环。

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

应该是:

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

if not (y==200):代替if not (x==100):