#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