为什么> =评估不适用于Python

时间:2015-06-29 22:14:35

标签: python evaluation comparison-operators

"> ="似乎不起作用。当fixedx = 100且len(img [0])为100时,代码不执行打印语句并将fixedx的值更改为99

两个变量都是整数。 有没有其他方法可以在python中进行比较?

single_sm.jpg是一个100x125的jpg文件。因此,len(img)= 125,len(img [0])= 100。

下面运行脚本会产生:

追踪(最近一次呼叫最后一次):

文件" shrink.py",第69行,

changed_img = shrink(pix,0,81,25,20,downsp)

文件" shrink.py",第37行,收缩

result [i,j] = img [fixedx,fixedy]

IndexError:索引100超出了轴1的大小为100

的范围
from PIL import Image
import numpy as np
import math

def shrink(img, x, y, size, scale, downsp):

    result = np.zeros((scale, scale, 3), dtype=np.uint8)
    scale_factor = math.floor(size/scale)
    for i in xrange(scale):
        for j in xrange(scale):

            fixedx = int(i*scale_factor+x)
            fixedy = int(j*scale_factor+y)

            if fixedx >= (len(img[0]) - 1):
                print "in this step"
                fixedx = len(img[0]) - 1
            if fixedy >= (len(img) - 1): 
                fixedy = len(img) - 1

            result[i,j] = img[fixedx, fixedy]
    return result

if __name__ == '__main__':

    img = Image.open("imgs/single_sm.jpg")
    pix = np.array(img)
    downsp = True
    changed_img = shrink(pix, 0, 81, 25, 20, downsp)
    changed_img = np.array(changed_img)
    resized = Image.fromarray(changed_img, 'RGB')
    resized.save('downsp.jpg')

1 个答案:

答案 0 :(得分:1)

错误说:

IndexError: index 100 is out of bounds for axis 1 with size 100

由于轴1是数组的第二维(fixedy,而不是fixedx),这意味着数组的值与您期望的不同。所以结论是阵列有125x100像素(实际上这正是你所说的:len(img) = 125, len(img[0]) = 100),而不是100x125。

为了确认这一点,我尝试用一​​个125x100零的普通数组代替图像,它显示的错误信息与你的相同。然后我用100x125阵列尝试了它,它运作了。