本文数据
实验代码(opencv版本 、PIL版本)
import numpy as np
import PIL.Image as image
from sklearn.cluster import KMeans
import cv2 as cv
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):
x,y,z = img.getpixel((i,j))
data.append([x/256.0,y/256.0,z/256.0])
f.close()
return np.mat(data),m,n
imgData,row,col = loadData('C:/Users/Administrator/Desktop/CAT.jpg')
label = KMeans(n_clusters=4).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)))
pic_new.save("result-bull-4.jpg", "JPEG")
'''opencv版本'''
'''
def loadData(filePath):
data = []
img = cv.imread(filePath)
print(img.shape)
m,n=img.shape[:2]
for i in range(m):
for j in range(n):
data.append([img[i,j][0]/256.0,img[i,j][1]/256.0,img[i,j][2]/256.0])
d=np.array(data)
return d,m,n
imgData,row,col=loadData('C:/Users/Administrator/Desktop/CAT.jpg')
label = KMeans(n_clusters=4).fit_predict(imgData)
label=label.reshape([row,col])
new_pic=np.zeros(shape=(row,col),dtype=np.uint8)
for i in range(row):
for j in range(col):
new_pic[i,j]=np.uint8(256/(label[i,j]+1))
cv.imshow("new_pic",new_pic)
'''
实验效果:(仅展示opencv版本)
--------------------------------------------------------------------------------------------------------------------参考mooc网课,北理工python机器学习应用课程