我正在尝试使用以下代码进行一些图像处理:
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__'
答案 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)
。你在第三个循环中做到了,在前两个循环中使用它。