我有一堆地图文件,我从Google地图以png格式下载,我想将其转换为单个较大图像。当我导入一个,我看着像素,我看到像素是一个单一的数字,范围在0..256而不是三个值列表。这里发生了什么?PIL导入png像素作为单个值而不是3个值向量
我使用
from PIL import Image
print open('b1.png').load()[0,0]
,我得到153
而非[R,G,B]
我的图像文件是
我有一堆地图文件,我从Google地图以png格式下载,我想将其转换为单个较大图像。当我导入一个,我看着像素,我看到像素是一个单一的数字,范围在0..256而不是三个值列表。这里发生了什么?PIL导入png像素作为单个值而不是3个值向量
我使用
from PIL import Image
print open('b1.png').load()[0,0]
,我得到153
而非[R,G,B]
我的图像文件是
这样的结果(在[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更多信息。
你的图像是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位像素,真彩色)
谢谢。我可以在不使用''file_data = Image.open('b1.png')。'convert('RGB')''的情况下直接在''RGB''模式下读取png文件吗? – Yotam 2014-11-24 08:29:59
你好,我不知道是否有可能,并且如果可以为所有图像设置默认模式。在这种情况下,这个.png图像的颜色空间设置为索引颜色,这就是为什么它在P模式下加载并需要转换为RGB模式才能获得(r,g,b)元组。 – dropp 2014-11-24 11:36:57