PIL将png像素导入为单值而不是3值向量

时间:2014-11-23 20:20:48

标签: python image png python-imaging-library

我有一堆地图文件,我是以png格式从Google地图下载的,我想将其转换为单个较大的图像。当我导入一个并查看像素时,我看到像素是0..256范围内的单个数字而不是三个值列表。这是怎么回事?

我正在使用

from PIL import Image

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

我得到153而不是[r,g,b]

我的图片文件是enter image description here

2 个答案:

答案 0 :(得分:4)

这种结果的原因([0,0]中的值153)是图像模式设置为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)

有关图像模式的详细信息,请访问the documentation

答案 1 :(得分: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(3x8位像素,真彩色)