python - 如何使用 Pillow 获得主色
问题描述
我想获取图像中使用的颜色(256/8 位)以及它们出现的次数。我希望能解决这个问题,image.getcolors()
但我不知道如何将 8 位颜色值转换为 RGB。
from PIL import Image
original = Image.open('image.jpg') # Open image
reduced = original.convert("P", palette=Image.WEB) # Convert to WEB palette (216 colors)
color_count = reduced.getcolors() # Get list of (count, color)
这工作正常,我得到一个颜色在 0 到 255 范围内的元组列表。如何获得这个 8 位像素的 RGB 值?
解决方案
PIL 的 getpalette
方法返回图像调色板的每个颜色索引的 RGB 值列表。不幸的是,所有 RGB 值都连接到一个列表中,因此您必须对结果进行后处理(即,将值 3 乘 3 分组)以获得您需要的结果。这是代码:
from PIL import Image
original = Image.open('test.png') # open RGB image
reduced = original.convert("P", palette=Image.WEB) # convert to web palette (216 colors)
palette = reduced.getpalette() # get palette as [r,g,b,r,g,b,...]
palette = [palette[3*n:3*n+3] for n in range(256)] # group 3 by 3 = [[r,g,b],[r,g,b],...]
color_count = [(n, palette[m]) for n,m in reduced.getcolors()]
print(color_count)
输出:
[(111230, [1, 1, 1]), (16063, [23, 23, 23]), (7468, [16, 8, 18]),
(15, [237, 240, 163]), (3, [253, 249, 160]), ... ]
推荐阅读
- postgresql - UNIQUE INDEX 上的 Postgres 语法错误 - HeidiSQL
- javascript - 在 Angular2 中验证反应式表单字段的最佳方法是什么?
- java - Thymeleaf 使用引导程序无法正常工作(th:fragment/th:replace)
- grails - Grails 应用程序未使用过滤器运行
- python - Python - 如何根据 DF 和其中的数据制作 SQL“创建表”语句?
- swift - 建立卡片堆栈
- java - 执行查询 NullPointerException 错误
- javascript - 在 Javascript 中调用连接变量
- python - Keras 和情感分析预测
- sql - sql server 2008 r2 端口配置路径