图像分割利用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格式保存图像
posted @ 2020-02-27 22:30  ACWink  阅读(574)  评论(0编辑  收藏  举报