Ошибка 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 окно, чтобы мы могли копировать и изменять. В этом случае мне приходилось записывать все построчно для тестирования (к счастью, код был не таким длинным).

Другие вопросы по тегам