基于Kmeans的图像分割


实现方式:

  • 编辑器:Spyder
  • 编译环境:Python 3.6
  • 操作系统:Win 10

下面直接贴出代码:

(2017.10.25修改),增加了下面代码中的第七行,将KMeans宏包导入。

 1 #################################################
 2 # kmeans: k-means cluster (PIC)
 3 # Email  : jtailong@163.com
 4 #################################################
 5 
 6 #coding:UTF-8
 7 from sklearn.cluster import KMeans
 8 import PIL.Image as image
 9 import numpy as np
10 #from KMeanspp import run_kmeanspp
11 
12 def load_data(file_path):
13     print('''导入数据
14     input:  file_path(string):文件的存储位置
15     output: data(mat):数据
16     ''')
17     f = open('D:/P/Kmeanspic/test1.jpg', "rb")  # 以二进制的方式打开图像文件
18     data = []
19     im = image.open(f)  # 导入图片
20     m, n = im.size  # 得到图片的大小
21     print (m, n)
22     for i in range(m):
23         for j in range(n):
24             tmp = []
25             x, y, z = im.getpixel((i, j))
26             tmp.append(x / 256.0)
27             tmp.append(y / 256.0)
28             tmp.append(z / 256.0)
29             data.append(tmp)
30     f.close()
31     return np.mat(data),m,n
32 print('主函数运行')
33 imgData,row,col = load_data('D:/P/Kmeanspic/test.jpg')  #调用上面的数据读取子函数
34 label = KMeans(n_clusters=3).fit_predict(imgData)  #图片聚成3类  
35  #打印新图像  
36 label = label.reshape([row,col])  
37 pic_new = image.new("L", (row, col))  
38 for i in range(row):                          #根据所属类别给图片添加灰度  
39     for j in range(col):  
40         pic_new.putpixel((i,j), int(256/(label[i][j]+1)))  
41 pic_new.save("温酒待君归.jpg", "JPEG") 

 

效果图对比:

参考链接:

http://www.cnblogs.com/byteHuang/p/7011654.html

http://blog.csdn.net/google19890102/article/details/52911835


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM