ML之Hierarchical clustering:利用层次聚类算法来把100张图片自动分成红绿蓝三种色调-阿里云开发者社区

开发者社区> 一个处女座的程序猿> 正文

ML之Hierarchical clustering:利用层次聚类算法来把100张图片自动分成红绿蓝三种色调

简介: ML之Hierarchical clustering:利用层次聚类算法来把100张图片自动分成红绿蓝三种色调
+关注继续查看

输出结果

image.png

实现代码

#!/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')  #


版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
如何用大数据开发套件周期调度机器学习算法
讨论如何用大数据的开发套件的调度功能和机器学习产品,进行自动化调度的机器学习计算。
4818 0
CV:基于face库利用cv2调用摄像头(或视频)根据人脸图片实现找人(先指定要识别已知人脸的文件夹转为numpy_array+输入新图片遍历已有numpy_array)
CV:基于face库利用cv2调用摄像头(或视频)根据人脸图片实现找人(先指定要识别已知人脸的文件夹转为numpy_array+输入新图片遍历已有numpy_array)
14 0
listview 点击条目 自动置顶或者自动置底部
关于Listview点击条目,自动滑动到点击条目实现: map_searchresult_list.post(new Runnable() { @Override public void run() { map_searchresult_list.smoothScrollToPosition(position); } });这种实现是点击条目在listview最下面。
561 0
使用LRU算法缓存图片,android 3.0
在您的UI中显示单个图片是非常简单的,如果您需要一次显示很多图片就有点复杂了。在很多情况下 (例如使用 ListView, GridView 或者 ViewPager控件), 显示在屏幕上的图片以及即将显示在屏幕上的图片数量是非常大的(例如在图库中浏览大量图片)。 在这些控件中,当一个子控件不显示的时候,系统会重用该控件来循环显示 以便减少对内存的消耗。同时垃圾回收机制还会
1008 0
Matlab实现K-Means聚类算法
人生如戏!!!! 一、理论准备       聚类算法,不是分类算法。分类算法是给一个数据,然后判断这个数据属于已分好的类中的具体哪一类。聚类算法是给一大堆原始数据,然后通过算法将其中具有相似特征的数据聚为一类。
1281 0
ML之SVM:利用SVM算法对手写数字图片识别数据集(PCA降维处理)进行预测并评估模型(两种算法)性能
ML之SVM:利用SVM算法对手写数字图片识别数据集(PCA降维处理)进行预测并评估模型(两种算法)性能
18 0
+关注
一个处女座的程序猿
国内互联网圈知名博主、人工智能领域优秀创作者,全球最大中文IT社区博客专家、CSDN开发者联盟生态成员、中国开源社区专家、华为云社区专家、51CTO社区专家、Python社区专家等,曾受邀采访和评审十多次。仅在国内的CSDN平台,博客文章浏览量超过2500万,拥有超过57万的粉丝。
1701
文章
0
问答
文章排行榜
最热
最新
相关电子书
更多
文娱运维技术
立即下载
《SaaS模式云原生数据仓库应用场景实践》
立即下载
《看见新力量:二》电子书
立即下载