|
- import numpy as np
- from PIL import Image as image
- #加载PIL包,用于加载创建图片
- from sklearn.cluster import KMeans#加载Kmeans算法
-
- def loadData(filePath):
- f = open(filePath,'rb') #以二进制形式打开文件
- data= []
- img =image.open(f)#以列表形式返回图片像素值
- m,n =img.size #获得图片大小
- for i in range(m):
- for j in range(n):
- #将每个像素点RGB颜色处理到0-1范围内
- x,y,z =img.getpixel((i,j))
- #将颜色值存入data内
- data.append([x/256.0,y/256.0,z/256.0])
- f.close()
- #以矩阵的形式返回data,以及图片大小
- return np.mat(data),m,n
- imgData,row,col =loadData('10069.jpg')#加载数据
-
- km=KMeans(n_clusters=3)
- #聚类获得每个像素所属的类别
- label =km.fit_predict(imgData)
- label=label.reshape([row,col])
- #创建一张新的灰度图以保存聚类后的结果
- pic_new = image.new("L",(row,col))
- #根据类别向图片中添加灰度值
- for i in range(row):
- for j in range(col):
- pic_new.putpixel((i,j),int(256/(label[i][j]+1)))
- #以JPEG格式保存图像
- pic_new.show()
|