如何将图像的颜色数量精准减少到指定的固定数值?
你提供的原始图像直方图如下:
将图像调整为仅包含10种不同颜色属于色彩量化操作,处理后直方图就会仅保留10个取值,以下是两种常用的实现方式:
方法1:直接调用图像处理库现成接口(最快实现)
以Python的PIL库为例,只需要几行代码就能完成:
from PIL import Image # 读取本地图像 img = Image.open("你的图像存储路径") # 直接量化为10种颜色 quantized_img = img.quantize(colors=10) # 保存处理后的图像 quantized_img.save("输出路径/量化后图像.png")
这个方法底层默认用的是中值切割量化算法,处理速度快,色彩过渡也比较自然。
方法2:基于K-means聚类自定义实现(灵活度更高)
如果你需要自定义量化规则,比如优先保留占比最高的10种颜色,可以用K-means聚类自行实现:
- 把图像像素从
(高度, 宽度, 3)的三维格式展平为(总像素数, 3)的二维数组 - 对所有像素的RGB值做K-means聚类,设置聚类数量为10,得到的10个聚类中心就是最终保留的10种颜色
- 遍历每个原始像素,将其替换为距离最近的聚类中心的RGB值
- 把处理后的像素数组恢复为原图像尺寸即可
两种方法处理后得到的图像都只会包含10种不同的颜色,对应的直方图也只会有10个非零取值,完全符合需求。
内容的提问来源于stack exchange,提问作者Toby Maguire
相关产品推荐
相关产品推荐

