实现方式:
- 编辑器: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