【问题标题】:PIL import png pixels as single value instead of 3 values vectorPIL 将 png 像素导入为单个值而不是 3 个值向量
【发布时间】:2014-11-23 20:20:47
【问题描述】:

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

我正在使用

from PIL import Image

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

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

我的图片文件是

【问题讨论】:

    标签: python image png python-imaging-library


    【解决方案1】:

    这种结果([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

    【讨论】:

    • 谢谢。我可以不使用file_data = Image.open('b1.png').convert('RGB')直接在RGB模式下读取png文件吗?
    • 你好,我不知道是否可以,是否可以为所有图像设置默认模式。在这种情况下,这个 .png 图像的颜色空间设置为索引颜色,这就是它在 P 模式下加载并需要转换为 RGB 模式以获得 (r,g,b) 元组的原因。
    【解决方案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 位像素,真彩色)

    【讨论】:

      猜你喜欢
      • 2011-12-15
      • 2016-07-19
      • 1970-01-01
      • 2013-03-18
      • 2015-11-27
      • 2019-12-25
      • 2020-01-05
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多