【问题标题】:Init object error TypeError: 'int' object has no attribute '__getitem__'初始化对象错误类型错误:“int”对象没有属性“__getitem__”
【发布时间】:2014-07-15 03:14:23
【问题描述】:

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

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__'

【问题讨论】:

    标签: python python-2.7 image-processing


    【解决方案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)。你在第三个循环中做对了,在前两个循环中也是这样。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-06-17
      • 1970-01-01
      • 2018-12-02
      • 1970-01-01
      • 1970-01-01
      • 2018-05-09
      • 2014-05-21
      • 1970-01-01
      相关资源
      最近更新 更多