如何使用Pillow中Image.quantize方法的kmeans参数?
PIL.Image.quantize的kmeans参数用法说明
PIL.Image.quantize的方法定义如下:
Image.quantize(colors=256, method=None, kmeans=0, palette=None, dither=1) colors – 期望输出的颜色数,≤ 256 kmeans – 整数类型
1. 参数具体使用方式
kmeans仅在未传入自定义palette(即使用程序自动生成调色板)时生效,作用是控制调色板生成阶段的聚类逻辑:
- 取默认值
0时,程序直接使用中位切分法生成符合colors数量要求的调色板,不执行kmeans聚类 - 取正整数
N时,程序会先对图像的所有像素颜色执行kmeans聚类,得到N个聚类中心,再从这N个中心里筛选出出现频率最高的colors个作为最终输出的调色板
2. 常见疑问解答
- kmeans取值是否需要和colors参数一致?
不需要,二者没有强制相等的要求,通常建议设置kmeans ≥ colors才能得到符合预期的效果:如果设置kmeans < colors,聚类最多只能得到kmeans个颜色中心,最终输出的实际颜色数最多只能等于kmeans,无法达到你设置的colors数值。 - 是否可以实现指定10个聚类但仅输出3种颜色,收纳非关注颜色的效果?
完全可以,这正是该参数的典型使用场景。示例调用代码如下:
# 先聚10类,最终仅输出3种颜色 res_img = origin_img.quantize(colors=3, kmeans=10)
上述代码执行时,会先把图像所有颜色聚为10个类别,再取出现频率最高的3个聚类中心作为最终调色板,其余7个聚类的所有像素都会被映射到这3个最终颜色中距离最近的那个,刚好符合你需要的效果。
内容的提问来源于stack exchange,提问作者P i
相关产品推荐
相关产品推荐

