K-means算法应用:压缩图片
from sklearn.datasets import load_sample_image from sklearn.cluster import KMeans import matplotlib.pyplot as plt #读取一张示例图片或自己准备的图片,观察图片存放数据特点 china = load_sample_image("china.jpg") plt.imshow(china) plt.show() print(china.shape) china
#根据图片的分辨率,适当降低分辨率 image= china[::3,::3]#降低分辨率 X = image.reshape(-1,3) plt.imshow(image) plt.show() print(image.shape,X.shape)
#用k均值聚类算法,将图片中所有颜色值做聚类。 n_color =64 model= KMeans(n_color) labels=model.fit_predict(X) #每个点的颜色分类 color=model.cluster_centers_ #64个聚类中心,颜色值
#用聚类中心的颜色代替原来颜色,形成新图片 color[labels] images=image.reshape(143, 214, 3) print(images.shape) plt.imshow(images) plt.show()
#查看原始图片与新图片所占用内存的大小 import sys print(sys.getsizeof(china)) print(sys.getsizeof(images))
#将原始图片与新图片保存文件,观察文件大小 import matplotlib.image as img img.imsave("C:\\china.jpg",china) img.imsave("C:\\china_zip.jpg",images)