Как преобразовать черно-белое пиксельное изображение в текст?

#python #image

#python #изображение

Вопрос:

У меня есть файл png с черными пикселями на белом фоне. Я пытался найти способ преобразовать его в текстовый файл с двоичным значением.

То есть мне нужен способ превратить 4-пиксельный черно-белый png, который выглядит как

XX
OX

в текст, который выглядит как

11
01

Лучшим результатом, который у меня был, была установка PIL, но либо я что-то неправильно установил, либо это не делает то, что я думаю, поскольку я получаю ошибку «имя ‘pix’ не определено».

 from PIL import Image

im = Image.open("image.jpg")
fil = open('file', 'w')
pixel = im.load()
row, column = im.size
for y in range(column):
    for x in range(row):
        pixel = pix[x,y]
        fil.write(str(pixel)   'n')
fil.close()
  

любая помощь или рекомендации будут оценены

Комментарии:

1. Вы получаете эту ошибку, потому что пытаетесь получить pix значение в строке pixel = pix[x,y] , но вы не указали pix его в своем коде. Возможно, вместо этого вы хотели написать что-то вроде этого : p = pixel[x, y] .

2. В вашем заголовке написано «преобразовать в текст», но в вашем вопросе указано «преобразовать в двоичный файл». Ни один из них не является полностью четко определенным. Вы имеете в виду преобразование двоичного изображения в текстовое представление значений RGB пикселей? Или что-то вроде формата PBM? Или на самом деле OCR?

Ответ №1:

pix действительно не определен. Вы сохранили свои пиксельные данные в своей переменной ‘pixel’, где хранятся пиксели.

Вы можете получить каждый пиксель с помощью: pixel[x, y], а не pix[x, y] . Попробуйте заменить

 fil.write(str(pixel)   'n')
  

С помощью:

 fil.write(str(pixel[x,y])   'n')
  

Вы могли бы сохранить пиксель в переменной, как вы сделали в

 pixel = pix[x,y]
  

Но для этого вы должны назвать переменную как-то иначе, поскольку pixel — это имя вашей переменной PixelData.
Вы могли бы сделать это так:

 pix = pixel[x,y]
fil.write(str(pix)   'n')
  

Ответ №2:

Вы можете попробовать следующий код, который преобразует черно-белое изображение в двоичный текст:

 from PIL import Image
import numpy as np

img = Image.open('<path-to-image>/bw.png').convert('L') #this is needed to convert the image to grayscale. PIL by default opens it as RGB.

np_img = np.array(img)
np_img[np_img > 0] = 1
print(np_img) # prints the binary text in matrix
  

Дополнительная ссылка: https://pillow.readthedocs.io/en/stable/reference/Image.html