Init对象错误TypeError:'int'对象没有属性'__getitem__'

时间:2014-07-14 17:55:16

标签: python python-2.7 image-processing

我正在尝试使用以下代码进行一些图像处理:

Image.open('C:\\temp\\img')
width, height = im.size
im  = im.resize((width*8,height*8), Image.BICUBIC)

pixdata = im.load()
for y in xrange(im.size[1]):
    for x in xrange(im.size[0]):
        if pixdata[x, y][0] < 165:
            pixdata = (0, 0, 0, 255)

for y in xrange(im.size[1]):
    for x in xrange(im.size[0]):
        if pixdata[x, y][1] < 165:
            pixdata = (0, 0, 0, 255)

for y in xrange(im.size[1]):
    for x in xrange(im.size[0]):
        if pixdata[x, y][2] > 0:
            pixdata[x, y] = (255, 255, 255, 255)

然而,当我做上述操作时,我得到一个TypeError。 pixdata正确地存储在内存中,但不知道为什么会出现此错误。

if pixdata[x, y][0] < 165:
TypeError: 'int' object has no attribute '__getitem__'

1 个答案:

答案 0 :(得分:1)

您的问题是您正在重新分配pixdata。它最初是Image对象,但随后是:

for y in xrange(im.size[1]):
    for x in xrange(im.size[0]):
        if pixdata[x, y][0] < 165:
            pixdata = (0, 0, 0, 255)

现在pixdata是(或可能是if测试可能会或可能不会通过)(0, 0, 0, 255)。现在,当您下次尝试访问pixdata[x, y][0]时(在稍后的同一循环迭代中,或稍后在另一个循环中),您试图索引到(0, 0, 0, 255)而不是图像数据,这显然不是不去工作。

解决方案:如果您仍然需要,请不要丢弃pixdata。你可能想要pixdata[x, y] = (0, 0, 0, 255)。你在第三个循环中做到了,在前两个循环中使用它。