图像分割利用KMeans生成灰度图
1 import numpy as np 2 import PIL.Image as image 3 from sklearn.cluster import KMeans 4 5 def loadData(filePath): 6 f = open(filePath,'rb')#以二进制形式打开文件 7 data = [] 8 img = image.open(f)#以列表形式返回图片像素值 9 m,n = img.size#获取图片大小 10 for i in range(m):#将每个像素点RGB处理到0-1 11 for j in range(n):#范围内并存放进data 12 x,y,z = img.getpixel((i,j)) 13 data.append([x/256.0,y/256.0,z/256.0]) 14 f.close() 15 return np.mat(data),m,n#以矩阵形式返回data,以及图片大小m,n 16 17 imgData,row,col = loadData('kmeans/bull.jpg')#加载数据 18 label = KMeans(n_clusters=4).fit_predict(imgData)#获得每个像素所属类别 19 label = label.reshape([row,col]) 20 pic_new = image.new("L", (row, col))#创建一个新的灰度图片保存聚类后的结果 21 for i in range(row):#根据所属聚类类别向图片添加灰度值 22 for j in range(col): 23 pic_new.putpixel((i,j), int(256/(label[i][j]+1))) 24 pic_new.save("result-bull-4.jpg", "JPEG")#以JPEG格式保存图像
追求吾之所爱