PIL импортирует пиксели png как одно значение вместо вектора 3 значений

У меня есть куча файлов карт, которые я скачал с карт Google в формате PNG, которые я хочу преобразовать в одно увеличенное изображение. Когда я импортирую один из них и смотрю на пиксели, я вижу, что пиксели представляют собой одно число в диапазоне 0..256 вместо списка трех значений. Что тут происходит?

я использую

from PIL import Image

print open('b1.png').load()[0,0]

и я получаю 153 вместо [r,g,b]

мой файл изображения

2 ответа

Решение

Причина такого результата (значение 153 в [0,0]) режим изображения установлен на P (8-битные пиксели, сопоставленные с любым другим режимом с использованием цветовой палитры). Если вы хотите установить другой режим (например, RGB) Вы можете сделать это перед вызовом метода load(),

Вот пример того, как это сделать:

from PIL import Image
file_data = Image.open('b1.png')
file_data = file_data.convert('RGB') # conversion to RGB
data = file_data.load()
print data[0,0]

и результат печати

(240, 237, 229)

Для получения дополнительной информации о режимах изображения, пожалуйста, посетите документацию.

Ваше изображение в mode=P, Его цвета определены в цветовой палитре.

>>> Image.open('b1.png')
<PIL.PngImagePlugin.PngImageFile image mode=P size=640x640 at 0x101856B48>

Вы хотите значение RGB. Сначала преобразуйте в RGB:

>>> im = Image.open('b1.png')
>>> im = im.convert('RGB')
>>> im.getpixel((1,1))
(240, 237, 229)

Из документов: http://pillow.readthedocs.org/en/latest/handbook/concepts.html?highlight=mode

P (8-битные пиксели, сопоставленные с любым другим режимом с использованием цветовой палитры)
...
RGB (3x8-битные пиксели, настоящий цвет)

Другие вопросы по тегам