PIL进口PNG像素作为单个值,而不是3个值向量(PIL import png pixels as

2019-10-21 07:55发布

我有一堆我从谷歌地图中,​​我要转换为一个更大的图像PNG格式的下载的地图文件。 当我输入一个,我看像素,我看到像素中的0..256,而不是三个值列表范围内的单个数字。 这里发生了什么?

我正在使用

from PIL import Image

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

我得到153代替[R,G,B]

我的图像文件

Answer 1:

这样的结果的原因(在值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)

有关图像模式的更多信息,请访问该文档 。



Answer 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位像素,色彩真实)



文章来源: PIL import png pixels as single value instead of 3 values vector