Python–PIL: getdata()- метод не возвращает кортеж

Я довольно новичок в кодировании в целом (кодирую уже 4 месяца), и у меня есть вопрос о PIL-модуле Python.

Всякий раз, когда я звоню getdata() - метод на изображении, я получаю что-то странное возвращается.

Из изображения импорта PIL:

# Histogram class to get the data
class Histogram:
    def __init__(self, image):
        image.convert("RGB")
        pixel_value_list = list(image.getdata())
        print(pixel_value_list[1])

image = Image.open("lenna.gif")
histogram = Histogram(image)

Но на консоль я не печатаю кортеж, а как-то 45... Понятия не имею... Мой вопрос: почему list(image.getdata()) не вернуть список с кортежами, а список полностью из целых чисел?

1 ответ

Решение

Если вы откроете файл с палитрой (например, GIF) и распечатаете список пикселей с помощью .getdata()вы получите список индексов в палитре, например:

im = Image.open("composplot.gif")
print(list(im.getdata()))

Выход:

[0, 0, 0, 0, 0, 0, 0, 0, 6, 223, 0, 0, 46, 219, 195, ...]

Однако, если вы преобразуете палитризованное изображение в RGB-изображение, вы получите список (r,g,b) кортежей. Пример:

im = Image.open("composplot.gif")
imrgb = im.convert("RGB")
print(list(imrgb.getdata()))

Выход:

[(255, 255, 255), (255, 255, 255), (216, 216, 216), (8, 8, 8), (191, 191, 191), (255, 255, 255), ...]
Другие вопросы по тегам