2014-11-23 55 views
1

我有一堆地图文件,我从Google地图以png格式下载,我想将其转换为单个较大图像。当我导入一个,我看着像素,我看到像素是一个单一的数字,范围在0..256而不是三个值列表。这里发生了什么?PIL导入png像素作为单个值而不是3个值向量

我使用

from PIL import Image 

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

,我得到153而非[R,G,B]

我的图像文件是enter image description here

回答

4

这样的结果(在[0,0]值153)的原因是,图像模式被设定为P(8位PIX els,使用调色板映射到任何其他模式)。如果您要设置不同的模式(例如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) 

有关图像模式,请访问the documentation更多信息。

+0

谢谢。我可以在不使用''file_data = Image.open('b1.png')。'convert('RGB')''的情况下直接在''RGB''模式下读取png文件吗? – Yotam 2014-11-24 08:29:59

+1

你好,我不知道是否有可能,并且如果可以为所有图像设置默认模式。在这种情况下,这个.png图像的颜色空间设置为索引颜色,这就是为什么它在P模式下加载并需要转换为RGB模式才能获得(r,g,b)元组。 – dropp 2014-11-24 11:36:57

2

你的图像是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(3×8位像素,真彩色)

相关问题