Попытка манипулировать изображениями с помощью Python

1

Я пытаюсь изучить 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, я попытался напечатать изображение массива на оболочке, и он показал мне значения в этом диапазоне.

Теги:
image-processing

2 ответа

3

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

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

  • 0
    Я просто хотел написать свой первый кусочек кода ... Но я обязательно буду использовать библиотеку, если мне придется что-то реализовывать ... читать документацию ... кажется очень полезным ... Спасибо!
3

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

image = bytearray(image)
for i in range(1,256):
    image[i]=0
  • 0
    Хорошо, попытался преобразовать его в bytesarray, получить следующую ошибку: NameError: имя 'bytesarray' не определено,
  • 0
    Извините, это bytearray . Я сделал это опечатка.
Показать ещё 3 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню