Попытка манипулировать изображениями с помощью Python - PullRequest
1 голос
/ 11 мая 2011

Я пытаюсь выучить Python, это первый код, который я написал:

    #!/usr/bin/python
    # Filename: read_image.py


    f=open('1.raw','r+b')
    image=f.read()
    f.close()


    f=open('copy.raw','w+b')
    f.write(image)
    f.close()

    for i in range(1,256):
        image[i]=0

В первой части я просто читаю изображение .raw в виде двоичного файла и делаю его копию. Эта часть отлично работает сама по себе, и я получаю копию изображения после выполнения кода. Однако я хочу манипулировать этим изображением, для начала я пытался затемнить первую строку изображения, однако я получаю следующую ошибку:

Traceback (most recent call last):
  File "C:/Python32/read_image.py", line 15, in <module>
    image[i]=0
TypeError: 'bytes' object does not support item assignment

Я попытался использовать переменные типа 'int', скопировав в них изображение, однако ошибка сохраняется, за исключением того, что вместо объекта 'bytes' не поддерживается присваивание, я получаю, что объект 'int' не поддерживает присваивание. Как мне решить эту проблему?

Обратите внимание, что это изображение в градациях серого, и значения пикселей варьируются от 0 до 255, я попытался напечатать изображение массива на оболочке, и оно показало мне значения в этом диапазоне.

Ответы [ 2 ]

3 голосов
/ 11 мая 2011

Если вы действительно пытаетесь выполнить обработку изображений в Python, попробуйте Python Imaging Library * (PIL), найденную здесь: http://www.pythonware.com/products/pil/

[*] Имейте в виду, что вам придется использовать Python 2.x, а не 3.x, если вы используете эту библиотеку, к сожалению, как в настоящее время имеет место с большим количеством мощных библиотек python.

3 голосов
/ 11 мая 2011

В Python bytes неизменны. Вы не можете изменить их, поэтому он выдает ошибку при попытке назначить элемент. Вы можете преобразовать свой неизменный bytes объект в bytearray:

image = bytearray(image)
for i in range(1,256):
    image[i]=0
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...