基於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