栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

Scipy-kmeans聚类色彩提取

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

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.size
    print(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 Image


app=Flask(__name__)

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

def 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文件:




    
    spicy




{{imgcolors}}
{% for c in imgcolors %} 颜色 {% endfor %}

结果:

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/530219.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号