Вы получаете эту ошибку, потому что вы пытаетесь сделать три слоя поиска в структуре, которая имеет глубину всего два слоя.
Чтобы сохранить вашу структуру на двух уровнях глубиной и исправить ваш код, может выглядеть так:
def imgRGB(im):
width, height = im.size
#create matrix
matrix = []
for i in range(height):
matrix.append([0, 0, 0] * width)
#get the rgb values
for x in range(width):
for y in range(height):
r,g,b = im.getpixel((x,y))
matrix[x][y*3+0] = r
matrix[x][y*3+1] = g
matrix[x][y*3+2] = b
return matrix
Кстати, лично я бы использовал одномерный массив numpy в качестве matrix
, а не какой-либо список Python вообще, и доступ с помощью что-то вроде matrix[(y*height) + x + subpixel_offset]
, где subpixel_offset
равно 0/1/2 для r / g / b. Или, в зависимости от ваших шаблонов доступа, вы можете поместить смещение r / g / b в другое место и умножить на него (x * y).
В любом случае, выделение памяти и сбор мусора намного меньше необходимо, а для доступа требуется только (очень быстрая) арифметика указателя c.