2016-02-03 3 views
-3

Я пытаюсь создать программу, которая удаляет только «r» и «b» значений rgb изображения, оставляя изображение с различными оттенками зеленого. Вот мой код:Я не понимаю «AttributeError: __getitem__»

import matplotlib.pyplot as plt 
from PIL import Image 

im = Image.open('Image.jpg') 
rgb_im = im.convert('RGB') 
width, height = rgb_im.size 
for x in range(width): 
    for y in range(height): 
     r, g, b = rgb_im.getpixel((x, y)) 
     im[x][y] = [0, g, 0, 255] 

fig, ax = plt.subplots(1, 1) 
ax.imshow(im, interpolation='none') 
fig.show() 

Я новичок в программировании и не понимаю, почему мой код бросает эту ошибку:

AttributeError: __getitem__

Может кто-нибудь объяснить, как это исправить или рекомендовать лучшее решение ? AttributeError: __getitem__

+0

Можете ли вы дать более подробную информацию? Какова полная ошибка? Какую строку он показывает? – DJMcMayhem

+1

Проводили ли вы какие-либо исследования по этому вопросу? Нет сомнений, что тысячи вопросов о потоке stackoverflow относятся к 'AttributeError: __getitem__'. –

+0

Без номера строки Я не уверен, что в вашем коде выбрасывает эту ошибку, но '__getitem__' - встроенная функция, вызываемая при использовании квадратных скобок для получения элемента (например, в списке или dict). [Справочник по Python 2] (https://docs.python.org/2/reference/datamodel.html#object.__getitem__), [Справочник по Python 3] (https://docs.python.org/3/reference/datamodel .html # object .__ getitem__) – whrrgarbl

ответ

0

Я собираюсь предположить, что ошибка в строке:

im[x][y] = ... 

, который был бы проблемой, если Image.open() объект не поддерживает [] синтаксис (который реализуется с помощью __getitem__).

Если это так, то исправление, вероятно:

rgb_im.setpixel(...) 
Смежные вопросы