一、利用第三方库Scipy聚类
1.可以在jupyter notebook里先尝试一下scipy的功能
聚类的思想为初始先确定均值,分类,其次计算每组的平均值,再次进行分类,反复进行使得结果更加精确
import numpy as np
from scipy.cluster.vq import vq, kmeans, whiten#kmean重新分类
import matplotlib.pyplot as plt
fe = np.array([[1.9,2.0],
[1.7,2.5],
[1.6,3.1],
[0.1,0.1],
[0.8,0.3],
[0.4,0.3],
[0.22,0.1],
[0.4, 0.3],
[0.4,0.5],
[1.8,1.9]])
book = np.array((fe[0], fe[1]))#找第一个、第二个数作为矩阵中心
print(type(book))
print("book: \n",book)
codebook, distortion = kmeans(fe, book)
# 可以写kmeans(wf,2), 2表示两个质心,同时启用iter参数;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()
结果如下: 红色的为聚类中心
2、小图片聚类
在了解过色彩聚类的原理及效果后,可以生成有关图片类似数组的信息,并且对图片进行一定的处理,可以进行旋转、调整尺寸大小等操作;
import os
from PIL import Image
import matplotlib.pyplot as plt
os.chdir(r'C:\\Users\\读书人mn\\Desktop\\123123')
print(os.getcwd())
im =np.array(Image.open("four.jpg"))
def colorz(filename,n=3):
img=Image.open(filename)
#print(dir(img))
img=img.resize((1024,1024))
# img=img.rotate(-90)
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 count,color in img.getcolors(w*h):
points.append(color)
return points
colorz('four.jpg',3)
结果如下:生成缩略图并将其色彩信息点都一一列出,取出图像的色彩和频次
3、色彩聚类
import numpy as np
from scipy.cluster.vq import vq, kmeans, whiten
import matplotlib.pyplot as plt
points=colorz('four.jpg',3)
print(points[0:10])
fe = np.array(points,dtype=float) #聚类需要是Float或者Double
# print(fe[0:10])
# book =np.array((fe[100],fe[1],fe[8],fe[8])) #聚类中心,初始值
# print(type(book))
# print("book: \n",book)
#codebook, distortion = kmeans(fe,book)
codebook, distortion = kmeans(fe,7) #7是聚类中心个数
# 可以写kmeans(wf,2), 2表示两个质心,同时启用iter参数 distortion就是控制方差
print("codebook:", codebook) #聚类中心
centers=np.array(codebook,dtype=int) #变为色彩,还得转为整数
print(centers)
print("distortion: ", distortion)
fe=np.array(points)
plt.scatter(fe[:,0], fe[:,2], c='b')
plt.scatter(codebook[:, 0], codebook[:,2], c='r') #聚类中心
plt.show()
结果如下:
4、合并到Flask软件中
新建imgeColor.py
之后,在上篇Main.py的基础上进行修改,加入下述内容:
同理,对上篇建好的index.html 加入<br>隔行后的内容后:
结果如下: