ML之Hierarchical clustering:利用层次聚类算法来把100张图片自动分成红绿蓝三种色调
【摘要】 ML之Hierarchical clustering:利用层次聚类算法来把100张图片自动分成红绿蓝三种色调
目录
输出结果
实现代码
输出结果
实现代码
#!/usr/bin/python# coding:utf-8from PI...
ML之Hierarchical clustering:利用层次聚类算法来把100张图片自动分成红绿蓝三种色调
目录
输出结果

实现代码
-
#!/usr/bin/python
-
# coding:utf-8
-
from PIL import Image, ImageDraw
-
from HierarchicalClustering import hcluster
-
from HierarchicalClustering import getheight
-
from HierarchicalClustering import getdepth
-
import numpy as np
-
import os
-
-
def drawdendrogram(clust, imlist, jpeg= 'clusters.jpg'):
-
h = getheight(clust)*20
-
w = 1200
-
depth = getdepth(clust)
-
scaling = float(w - 150)/depth
-
-
img = Image.new('RGB', (w, h), (255, 255, 255))
-
draw = ImageDraw.Draw(img)
-
-
draw.line((0, h/2, 10, h/2), fill=(255, 0, 0))
-
drawnode(draw, clust, 10, int(h/2), scaling, imlist, img)
-
img.save(jpeg)
-
-
def drawnode(draw,clust,x,y,scaling,imlist,img): if clust.id < 0:
-
h1 = getheight(clust.left)*20
-
h2 = getheight(clust.right)*20
-
top = y - (h1 + h2)/2
-
bottom = y + (h1 + h2)/2
-
ll = clust.distance * scaling
-
draw.line((x, top + h1/2, x, bottom - h2/2), fill=(255, 0, 0))
-
-
draw.line((x, top + h1/2, x + ll, top + h1/2), fill=(255, 0, 0))
-
-
draw.line((x, bottom - h2/2, x + ll, bottom - h2/2), fill=(255, 0, 0))
-
-
drawnode(draw, clust.left, x + ll, top + h1/2, scaling, imlist, img)
-
drawnode(draw, clust.right, x + ll, bottom - h2/2, scaling, imlist, img)
-
else:
-
nodeim = Image.open(imlist[clust.id])
-
nodeim.thumbnail((20, 20))
-
ns = nodeim.size
-
print (x,y - ns[1]//2)
-
print (x + ns[0])
-
print (img.paste(nodeim, (int(x), int(y - ns[1]//2), int(x + ns[0]),int(y + ns[1] - ns[1]//2))))
-
-
imlist=[]
-
folderpath = r'F:\File_Python\Crawler'
-
for filename in os.listdir(folderpath):
-
if os.path.splitext(filename)[1]=='.jpg':
-
imlist.append(os.path.join(folderpath,filename))
-
n=len(imlist)
-
print(n)
-
-
features =np.zeros((n,3))
-
for i in range(n):
-
im=np.array(Image.open(imlist[i]))
-
R = np.mean(im[:,:,0].flatten())
-
G = np.mean(im[:,:,1].flatten())
-
B = np.mean(im[:,:,2].flatten())
-
features[i]=np.array([R,G,B])
-
-
tree = hcluster(features)
-
drawdendrogram(tree, imlist, jpeg=r'C:\Users\99386\Desktop\result.jpg') #
相关文章
ML之H-clustering:自定义HierarchicalClustering层次聚类算法
ML之H-clustering:利用层次聚类算法来把100张图片自动分成红绿蓝三种色调
文章来源: yunyaniu.blog.csdn.net,作者:一个处女座的程序猿,版权归原作者所有,如需转载,请联系作者。
原文链接:yunyaniu.blog.csdn.net/article/details/80020614
【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)