Ошибка Python: индекс за пределами
Мне было интересно узнать об обработке изображений с помощью Python, поэтому я нашел эту замечательную библиотеку imageio, я пытался манипулировать пикселями изображения и сохранять их в новом файле, но у меня были некоторые проблемы с циклами, это то, что код выглядит как ввод описание изображения здесь и это ошибка, которую я получил! IndexError: индекс 3507 выходит за пределы оси 0 с размером 3507 код:
# -*- coding: iso-8859-1 -*-
import imageio
import numpy as np
im = imageio.imread("JAFFRE009a.png")
taille=im.shape #taille is a tuple (Width,Height)
print taille # (4961,3507)
matrice_pixels=open("matrice.txt",'w')
for i in range(taille[1]):
line=""
for j in range(taille[0]):
line+=repr(im[i][j])
matrice_pixels.write(line+'\n')
matrice_pixels.close()
2 ответа
Поскольку ваше изображение не имеет квадратной формы, измените его, прежде чем проходить цикл
РЕДАКТИРОВАТЬ
Мы можем перебирать каждую позицию строки / столбца и сохранять в файл, как показано ниже. Это займет очень много времени в зависимости от размера файла.
Вместо того, чтобы писать свою собственную функцию, вы можете воспользоваться встроенным двоичным сохранением (которое более эффективно), так как
np.save('matrix.py', np_array)
Вы можете загрузить этот файл как массив np и манипулировать
Или как текстовый файл, используя np.save
[займет больше времени]
np.save('matrix.txt', np_array)
Рабочий код:
import imageio
import numpy as np
im = imageio.imread("9v9zU.png")
matrice_pixels=open("matric.txt","wb")
nx,ny = im.shape
for i in range(nx):
line=""
for j in range(ny):
line+=repr(im[i][j])
matrice_pixels.write(line+'\n')
matrice_pixels.close()
#Save as Binary data
np.save('matrix1.npy', im)
#Save as Human readable data
np.savetxt('matrix1.txt', im)
С другой стороны, вы можете посмотреть готовые библиотеки, которые будут делать то, что вы собираетесь делать. Например, в этой ссылке SO обсуждается, как удалить часть изображения на основе его цвета, используя PIL
библиотека.
Кроме того, в будущем, пожалуйста, НЕ размещайте изображение своего кода. Скопируйте /pase в SO окно, чтобы мы могли копировать и изменять. В этом случае мне приходилось записывать все построчно для тестирования (к счастью, код был не таким длинным).