Policy Information
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张图片自动分成红绿蓝三种色调
评论