K-means聚类分析属于非层次聚类法的一种。首先选择某些记录作为凝聚点(可人为指定),按就近原则将其余记录向凝聚点凝集,计算出各个处室分类的中心位置(均值),用计算出的中心位置重新进行聚类,如此循环反复,知道凝聚点位置收敛为止。

kmeans算法又名k均值算法,K-means算法中的k表示的是聚类为k个簇,means代表取每一个聚类中数据值的均值作为该簇的中心,或者称为质心,即用每一个的类的质心对该簇进行描述。
        其算法思想大致为:先从样本集中随机选取 k个样本作为簇中心,并计算所有样本与这 k个“簇中心”的距离,对于每一个样本,将其划分到与其距离最近的“簇中心”所在的簇中,对于新的簇计算各个簇的新的“簇中心”。
————————————————
版权声明:本文为CSDN博主「Best-yz」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/qq_43741312/article/details/97128745

一.基本原理实例

import numpy as np
from scipy.cluster.vq import vq,kmeans,whiten
import matplotlib.pyplot as plt#样本数据
fe=np.array([[1.6,2.3],[0.5,0.8],[0.1,2.8],[3.5,5.6],[0.6,0.7]])#选择出初始化的凝聚中心K
book=np.array((fe[0],fe[1]))
print("book:\n",book)#计算数值之间的距离
codebook,distortion=kmeans(fe,book)
print(kmeans(fe,book))
print("codebook:",codebook)
print("distortion:",distortion)#将各个数据点再图里呈现
plt.scatter(fe[:,0],fe[:,1],c='g')
plt.scatter(codebook[:,0],codebook[:,1],c="r")
plt.show

二.对一张图片的色彩聚类

1.用PIL生成小尺寸图片,准备在缩略图上进行聚类。并且得出图片色彩的数据值。

im=np.array(Image.open("logo.png"))def colorz(filename,n=3):img=Image.open(filename)img.thumbnail((200,200))w,h=img.sizeprint(w,h)print("w*h=",w*h)plt.axis("off")plt.imshow(img)plt.show()points=[]for cout,color in img.getcolors(w*h):points.append(color)#将图片颜色数据装入列表return points
colorz("logo.png",3)

2.对色彩聚类

points=colorz("logo.png",3)
fe=np.array(points,dtype=float)
book=np.array((fe[100],fe[1],fe[8],fe[8]))codebook,distortion=kmeans(fe,7)
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()
  • 承接上步colorz自定义函数,通过float方法处理数据,因为聚类数据需要时Float或者是Double
  • 确定聚类中心,放入book
  • kmeans(fe,7),7是聚类中心个数
  • 聚类结束,若想在图里显示色彩,还得转为整数

运行结果:红色为七个聚类中心。

3.合并到FLlask软件中

julei.py文件:

from flask import Flask,render_template
import numpy as np
from scipy.cluster.vq import vq,kmeans,whiten
from PIL import Imageapp=Flask(__name__)def colorz(filename,n=3):img=Image.open(filename)img=img.rotate(-90)img.thumbnail((200,200))w,h=img.sizepoints=[]for cout,color in img.getcolors(w*h):points.append(color)return pointsdef kmeansColor(img,n):points=colorz(img,3)fe = np.array(points, dtype=float)codebook, distortion = kmeans(fe, 7)centers = np.array(codebook, dtype=int)return centers@app.route('/')def julei():#genFrame()imgcolors=kmeansColor("static/all/image100.jpg",5)return render_template("julei.html",imgcolors=imgcolors)if "__main__"==__name__:app.run(port="0723")

julei.html文件:

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>spicy</title>
</head>
<body>
<img height="400" src='static/all/image0.jpg'>
<br>
{{imgcolors}}<br>
{% for c in imgcolors %}
<font style="color:rgb({{c[0]}},{{c[1]}},{{c[2]}}">颜色</font>
{% endfor %}
</body>
</html>

结果:

Scipy-kmeans聚类色彩提取相关推荐

  1. Python聚类色彩提取——Scipy-kmeans

    一.聚类:物以类聚 数组可以进行聚类,并找到数组的聚类中心.使用的第三方库是scipy,需要pip install scipy,先安装该库.数组聚类代码: import numpy as np fro ...

  2. Python学习 | 2021-11-05 Scipy聚类色彩提取

    目录 一.聚类分析 1.聚类 2.Scipy中的聚类算法(K-Means) 3.聚类示例 完整代码: 运行结果: 函数使用: 二.图像色彩聚类 操作步骤: 完整代码: 运行结果: 三.合并至Flask ...

  3. 基于python的K-means聚类提取图片主色

    基于python+opencv的彩色图片主色提取--利用K-means聚类算法 一.K-means聚类算法 1.K-means算法原理 2. K-means聚类算法流程 3.sklearn库中skle ...

  4. 基于K-Means聚类算法的主颜色提取

    点击上方"小白学视觉",选择加"星标"或"置顶" 重磅干货,第一时间送达 01.简介 本期我们将一起实现基于K-Means聚类算法的主色提取 ...

  5. 基于Kmeans聚类算法的图像分割(色彩分割)实战

    基于Kmeans聚类算法的图像分割(色彩分割)实战 图像分割是将一幅图像分割成多个像素区域的任务.属于同一对象类型的所有像素都被分配到同一类别下.图像分类是给一副完整的图像一个类别,目标检测是检测到图 ...

  6. OpenCV-Python实战(番外篇)——利用 K-Means 聚类进行色彩量化

    OpenCV-Python实战(番外篇)--利用 K-Means 聚类进行色彩量化 前言 利用 K-Means 聚类进行色彩量化 完整代码 显示色彩量化后的色彩分布 相关链接 前言 K-Means 聚 ...

  7. 沙湖王 | 用Scipy实现K-means聚类算法

    沙湖王 | 用Scipy实现K-means聚类算法 用Scipy实现K-means聚类算法

  8. 用Scipy实现K-means聚类算法

    用Scipy实现K-means聚类算法 用Scipy实现K-means聚类算法 | 沙湖王 用Scipy实现K-means聚类算法 作者: rickey 日期: 2012 年 7 月 21 日 发表评 ...

  9. 第七次作业整理(分镜+色彩提取/20211105)

    目录 分镜 shot.py 修改main.py ​ 色彩提取 原理 安装包的准备 生成缩略图 得到聚类中心 分镜 前面的内容中已经分别实现哈希均值和直方图分镜,以及pycharm的基本使用和逐帧提取, ...

最新文章

  1. Hbase集群搭建二(Hadoop搭建)
  2. 三种平摊分析的方法分别为_[2020.Vol.188]表征城市树木滞尘:一种景观分析方法...
  3. 最牛逼的开源机器学习框架,你知道几个
  4. 他被女朋友拉黑后,写了个“舔狗”必备神器
  5. 无线路由器的WDS功能如何配置?
  6. 佛门重地,不适合搞这种事!!
  7. 利用云计算打造政务信息化及应急指挥云平台
  8. 贝叶斯网的R实现( Bayesian networks in R)bnlearn(4)
  9. 【BZOJ3530】数数(AC自动机,动态规划)
  10. 工具方法:java读取Excel合并单元格(简单实例)
  11. 操盘手教你抓涨停的办法
  12. 查询系统css portal,详细论述 Portal 的样式单 --- Portal.css
  13. table表格内容互换
  14. 【noiOJ】p7939
  15. 6.Striped64源码解析
  16. 如何固定输出每行打印的个数
  17. 小程序更换云服务器和域名完全攻略
  18. Android——单元测试
  19. scorm 1.2标准基本知识
  20. Comparator.comparing的使用

热门文章

  1. 大数据会给我们带来什么影响?
  2. 物联网实战之基于OneNET的智能农业系统
  3. 训练题库CTF题库最近在论证一个问题,到底是先有鸡还是先有蛋 (Ijm,lo 3wsdr4 6tghu7)
  4. win10从旧的固态硬盘迁移系统到新的固态硬盘,开机黑屏LOGO处转圈,并启动不了,已解决,特写此贴,供急需解决该问题的有缘人参考!
  5. 一个可以截取其他App素材的办法Visual Studio Code
  6. Android事件分发机制浅析
  7. 360安全卫士造成Sharepoint文档库”使用资源管理器打开“异常
  8. 关于drawInRect: withAttributes: 等新方法的使用
  9. DolphinDB智臾科技CEO周小华:《从反向控制的终极目标谈时序数据库的架构设计》
  10. 电动车充电桩显示无法连接服务器失败,电动车充电桩故障排除技巧