Вы можете получить доступ к значению оттенка серого для каждого отдельного пикселя, обратившись к значениям r, g или b, которые будут одинаковыми для изображения с оттенком серого.
Ie
img = Image.open('eggs.png').convert('1')
rawData = img.load()
data = []
for y in range(24):
for x in range(24):
data.append(rawData[x,y][0])
Это не решает проблему скорости доступа.
Я больше знаком с scikit-image, чем с подушкой. Мне кажется, что если все, что вам нужно, перечисляет значения оттенков серого, вы можете использовать scikit-изображение, которое хранит изображения в виде массивов numpy и использует img_as_ubyte для представления изображения в виде массива uint, содержащего значения от 0 до 255.
Изображения NumPy Arrays обеспечивают хорошую отправную точку, чтобы увидеть, как выглядит код.
Python обходит __getattr__
, __getattribute__
и экземпляр dict при поиске «специальных» методов для реализации языковой механики. (По большей части специальные методы - это те, у которых есть два символа подчеркивания с каждой стороны имени.) Если вы ожидали, что i[0]
вызовет i.__getitem__(0)
, что в свою очередь вызовет i.__getattr__('__getitem__')(0)
, вот почему этого не произошло .