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-битные пиксели, настоящий цвет)