K-means算法应用:图片压缩
from sklearn.datasets import load_sample_image from sklearn.cluster import KMeans import matplotlib.pyplot as plt import numpy as np import matplotlib.image as img #image类可以用来读或存图片 china = load_sample_image("china.jpg") plt.imshow(china) plt.show() print(china.shape) print(china)
#降低分辨率 china1=china[::2,::2] #步长为2 plt.imshow(china1) plt.show() print(china1.shape) print(china1)
#用k均值聚类算法,将图片中所有的颜色值做聚类,用聚类中心的颜色代替原来的颜色值,形成新的图片 china2=china1.reshape(-1,3) #print(china2.shape) n_color=64 #(256,256,256) model=KMeans(n_color) labels=model.fit_predict(china2) #每个点的颜色分类,0-63,fit做计算,predict每个点聚成什么类 colors=model.cluster_centers_ #64个聚类中心,颜色值 china3=colors[labels] #还原颜色 china3=china3.reshape(china1.shape) #还原维数 plt.imshow(china3.astype(np.uint8)) #类型转换 plt.show()
#观察原始图片与新图片所占用内存的大小
import sys
print(sys.getsizeof(china))
print(sys.getsizeof(china3))
#将原始图片与新图片保存成文件,观察文件的大小 img.imsave('e:\\china.jpg',china) img.imsave('e:\\china2.jpg',china3) import sys print(sys.getsizeof('e:\\china.jpg')) print(sys.getsizeof('e:\\china2.jpg'))