Прочитать пиксели изображения, строка за строкой - PullRequest
0 голосов
/ 19 февраля 2020

Я работал над проектом, который требует, чтобы мой код получал пиксельные данные изображения и реконструировал его (в другой форме), однако, когда я пытаюсь создать изображение с использованием пиксельных данных, оказывается, что все пиксели находятся в одной строке.

Вот мой код

pixels = (image.getdata())

img_array = np.array(pixels, dtype=np.uint8)

img = Image.fromarray(img_array)
img.save('testrgb.png')

Как мне построчно считывать пиксели изображения и располагать их в разных списках в зависимости от их строк?

РЕДАКТИРОВАТЬ Мне удалось достичь желаемого результата с помощью следующего кода

pixels = list(image.getdata())
print(pixels[0][0])
pixels2 = []
for i in range(0, height):
    pixels2.append(pixels[i * width:(i + 1) * width])

#for pixel_value in pixels:
    #print(pixel_value)

img_array = array = np.array(pixels2, dtype=np.uint8)

img = Image.fromarray(array)
img.save('maps/testrgb.png')

1 Ответ

1 голос
/ 19 февраля 2020

Из документации по getdata:

Возвращает содержимое этого изображения в виде объекта последовательности, содержащего значения пикселей. Объект последовательности сглаживается, поэтому значения для первой строки следуют непосредственно за значениями нулевой строки и т. Д.

Если вы хотите иметь массивное представление фактического изображения NumPy, используйте np.array на image напрямую:

import numpy as np
from PIL import Image

# Open image with Pillow
image = Image.open('path/to/your/image.png')

# Convert Pillow image to NumPy array
img_array = np.array(image, dtype=np.uint8)

# ... do some operation on NumPy array (copy rows to lists, etc.) ...

# Convert NumPy array back to Pillow image
img = Image.fromarray(img_array)

# Save image with Pillow
img.save('testrgb.png')

Надеюсь, это поможет!

----------------------------------------
System information
----------------------------------------
Platform:    Windows-10-10.0.16299-SP0
Python:      3.8.1
NumPy:       1.18.1
Pillow:      7.0.0
----------------------------------------
...