使用PIL获取像素的RGB

是否可以使用PIL获得像素的RGB颜色?我正在使用此代码:


im = Image.open("image.gif")

pix = im.load()

print(pix[1,1])

但是,它仅输出一个数字(例如0或1),而不输出三个数字(例如,60,60,60对于R,G,B)。我想我对功能不了解。我想解释一下。


非常感谢。


芜湖不芜
浏览 1316回答 3
3回答

呼唤远方

是的,这样:im = Image.open('image.gif')rgb_im = im.convert('RGB')r, g, b = rgb_im.getpixel((1, 1))print(r, g, b)(65, 100, 137)之所以之前获得单个值,pix[1, 1]是因为GIF像素引用了GIF调色板中的256个值之一。另请参见此 SO帖子:GIF和JPEG的Python和PIL像素值不同,并且此PIL参考页面 包含有关该convert()函数的更多信息。顺便说一句,您的代码将对.jpg图像正常工作。

蛊毒传说

GIF将颜色存储为调色板中x种可能颜色中的一种。阅读有关gif受限调色板的信息。因此,PIL为您提供调色板索引,而不是该调色板颜色的颜色信息。编辑:删除了具有错字的博客帖子解决方案的链接。其他答案也做同样的事情而没有错字。

慕的地8271018

转换图像的另一种方法是从调色板创建RGB索引。from PIL import Imagedef chunk(seq, size, groupByList=True):    """Returns list of lists/tuples broken up by size input"""    func = tuple    if groupByList:        func = list    return [func(seq[i:i + size]) for i in range(0, len(seq), size)]def getPaletteInRgb(img):    """    Returns list of RGB tuples found in the image palette    :type img: Image.Image    :rtype: list[tuple]    """    assert img.mode == 'P', "image should be palette mode"    pal = img.getpalette()    colors = chunk(pal, 3, False)    return colors# Usageim = Image.open("image.gif")pal = getPalletteInRgb(im)
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python