#python 颜色聚类处理

Kmeans聚类算法:是最常用的聚类算法,主要思想是:在给定K值和K个初始类簇中心点的情况下,把每个点(亦即数据记录)分到离其最近的类簇中心点所代表的类簇中,所有点分配完毕之后,根据一个类簇内的所有点重新计算该类簇的中心点(取平均值),然后再迭代的进行分配点和更新类簇中心点的步骤,直至类簇中心点的变化很小,或者达到指定的迭代次数。

假设k值为2时的迭代聚类
请添加图片描述

案例:对一张图片进行主色调提取

1、压缩图片,将图片中各像素块的颜色进行储存

def colorz(filename,n=3):
    img=Image.open(filename)
    img=img.rotate(-90)
    img.thumbnail((200,200))
    w,h=img.size
    print(w,h)
    print('w*h=',w*h)
    points=[]
    for count,color in img.getcolors(w*h):
        points.append(color)

2、对图片的像素点的集合进行聚类,计算出中心点的色彩值

def kmeansColor(img,n):
    points=colorz(img,3)
    fe = np.array(points,dtype=float)
    codebook, distortion = kmeans(fe,n) #n表示有n个聚类中心
    centers=np.array(codebook,dtype=int)#计算出的色彩中心位置
    return centers

3、可视化显示聚类结果,rgb的原理

#print("codebook:", codebook)   #聚类中心
centers=np.array(codebook,dtype=int)  #变为色彩,还得转为整数
fe=np.array(points)
plt.scatter(fe[:,0], fe[:,2], c='b')#设置全部像素点的颜色为蓝色
plt.scatter(codebook[:, 0], codebook[:,2], c='r')   #聚类中心为红色
plt.show()

设置5个聚类中心的结果:
请添加图片描述
在HTML中显示:

{% for c in imgcolors %}
<div style="background-color:rgb({{c[0]}},{{c[1]}},{{c[2]}}); width: 40%; height: 30%;">
    <font style="color:rgb({{c[0]}},{{c[1]}},{{c[2]}});font-size:50px">1</font>
</div>
{% endfor %}

请添加图片描述

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值