Scipy-kmeans聚类色彩提取
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聚类色彩提取相关推荐
- Python聚类色彩提取——Scipy-kmeans
一.聚类:物以类聚 数组可以进行聚类,并找到数组的聚类中心.使用的第三方库是scipy,需要pip install scipy,先安装该库.数组聚类代码: import numpy as np fro ...
- Python学习 | 2021-11-05 Scipy聚类色彩提取
目录 一.聚类分析 1.聚类 2.Scipy中的聚类算法(K-Means) 3.聚类示例 完整代码: 运行结果: 函数使用: 二.图像色彩聚类 操作步骤: 完整代码: 运行结果: 三.合并至Flask ...
- 基于python的K-means聚类提取图片主色
基于python+opencv的彩色图片主色提取--利用K-means聚类算法 一.K-means聚类算法 1.K-means算法原理 2. K-means聚类算法流程 3.sklearn库中skle ...
- 基于K-Means聚类算法的主颜色提取
点击上方"小白学视觉",选择加"星标"或"置顶" 重磅干货,第一时间送达 01.简介 本期我们将一起实现基于K-Means聚类算法的主色提取 ...
- 基于Kmeans聚类算法的图像分割(色彩分割)实战
基于Kmeans聚类算法的图像分割(色彩分割)实战 图像分割是将一幅图像分割成多个像素区域的任务.属于同一对象类型的所有像素都被分配到同一类别下.图像分类是给一副完整的图像一个类别,目标检测是检测到图 ...
- OpenCV-Python实战(番外篇)——利用 K-Means 聚类进行色彩量化
OpenCV-Python实战(番外篇)--利用 K-Means 聚类进行色彩量化 前言 利用 K-Means 聚类进行色彩量化 完整代码 显示色彩量化后的色彩分布 相关链接 前言 K-Means 聚 ...
- 沙湖王 | 用Scipy实现K-means聚类算法
沙湖王 | 用Scipy实现K-means聚类算法 用Scipy实现K-means聚类算法
- 用Scipy实现K-means聚类算法
用Scipy实现K-means聚类算法 用Scipy实现K-means聚类算法 | 沙湖王 用Scipy实现K-means聚类算法 作者: rickey 日期: 2012 年 7 月 21 日 发表评 ...
- 第七次作业整理(分镜+色彩提取/20211105)
目录 分镜 shot.py 修改main.py 色彩提取 原理 安装包的准备 生成缩略图 得到聚类中心 分镜 前面的内容中已经分别实现哈希均值和直方图分镜,以及pycharm的基本使用和逐帧提取, ...
最新文章
- Hbase集群搭建二(Hadoop搭建)
- 三种平摊分析的方法分别为_[2020.Vol.188]表征城市树木滞尘:一种景观分析方法...
- 最牛逼的开源机器学习框架,你知道几个
- 他被女朋友拉黑后,写了个“舔狗”必备神器
- 无线路由器的WDS功能如何配置?
- 佛门重地,不适合搞这种事!!
- 利用云计算打造政务信息化及应急指挥云平台
- 贝叶斯网的R实现( Bayesian networks in R)bnlearn(4)
- 【BZOJ3530】数数(AC自动机,动态规划)
- 工具方法:java读取Excel合并单元格(简单实例)
- 操盘手教你抓涨停的办法
- 查询系统css portal,详细论述 Portal 的样式单 --- Portal.css
- table表格内容互换
- 【noiOJ】p7939
- 6.Striped64源码解析
- 如何固定输出每行打印的个数
- 小程序更换云服务器和域名完全攻略
- Android——单元测试
- scorm 1.2标准基本知识
- Comparator.comparing的使用
热门文章
- 大数据会给我们带来什么影响?
- 物联网实战之基于OneNET的智能农业系统
- 训练题库CTF题库最近在论证一个问题,到底是先有鸡还是先有蛋 (Ijm,lo 3wsdr4 6tghu7)
- win10从旧的固态硬盘迁移系统到新的固态硬盘,开机黑屏LOGO处转圈,并启动不了,已解决,特写此贴,供急需解决该问题的有缘人参考!
- 一个可以截取其他App素材的办法Visual Studio Code
- Android事件分发机制浅析
- 360安全卫士造成Sharepoint文档库”使用资源管理器打开“异常
- 关于drawInRect: withAttributes: 等新方法的使用
- DolphinDB智臾科技CEO周小华:《从反向控制的终极目标谈时序数据库的架构设计》
- 电动车充电桩显示无法连接服务器失败,电动车充电桩故障排除技巧