Создание серого изображения из двумерного массива значений пикселей - PullRequest
1 голос
/ 24 октября 2019

Я пытаюсь изменить значения из PNG-изображения в оттенках серого, а затем создать изображение из этих измененных значений.

Первым шагом, который я сделал, было использование Python-реализации libpng . После этого я смог получить список всех значений пикселей PNG. Это изображение серой шкалы, поэтому значения от 0 до 100. Я делаю быстрый алгоритм для изменения значений. А потом я пытаюсь создать его в новый файл PNG. Все в одной строке, поэтому я использую регулярное выражение для форматирования в 2D-массив.

Я попытался использовать это, что нашел здесь

from PIL import Image
import numpy as np


pixels = [[100,0,0],[0,100,0],[0,0,100]]
# Convert the pixels into an array using numpy
array = np.array(pixels)

print(array)

# Use PIL to create an image from the new array of pixels
new_image = Image.fromarray(array, 'L')
new_image.save('testing.png')

Но я предполагаю, что форматирование, которое использует PIL, отличается от того, что делает libpng, вместо того, чтобы делатьизображение, которое выглядит как 3 белых пикселя по диагонали, я получаю только 1 белый пиксель в левом верхнем углу. Так что либо я изменяю значения, полученные из libpng, чтобы numpy работал, либо я нахожу в libpng что-то, что позволит мне напрямую изменить значения и создать новый файл.

1 Ответ

1 голос
/ 24 октября 2019

Ошибка в вашем коде в том, что вы не указали правильный тип данных для массива. Если вы позвоните array = np.array(pixels, dtype='uint8'), тогда ваш код будет работать.

...