1. 应用K-means算法进行图片压缩
读取一张图片
观察图片文件大小,占内存大小,图片数据结构,线性化
用kmeans对图片像素颜色进行聚类
获取每个像素的颜色类别,每个类别的颜色
压缩图片生成:以聚类中收替代原像素颜色,还原为二维
观察压缩图片的文件大小,占内存大小
实现代码:
from sklearn.datasets import load_sample_image from sklearn.cluster import KMeans import matplotlib.pyplot as plt import numpy as np import sys china = load_sample_image("china.jpg") #读取图片暂存在china里 image = china[::3,::3] #改变原图片尺寸 X = image.reshape(-1,3) #线性化,对颜色分类 print(china.shape,image.shape,X.shape) print("原图片数据结构:\n",china) n_colors = 64 model=KMeans(n_colors) #用k均值对颜色进行聚类为64种颜色 label=model.fit_predict(X) #对每个点颜色进行分类 0-63 colors=model.cluster_centers_ #根据64个聚类中心的颜色进行分类 new_china=colors[label].reshape(image.shape) #聚类中的颜色代替原色 print("每个像素的类别:\n",label) print("每个类别的颜色:\n",colors) plt.imshow(china) plt.show() plt.imshow(new_china.astype(np.uint8)) #颜色均值为浮点型转为整形 plt.show() print("原图片大小:",china.size) print("原图片占内存大小:",sys.getsizeof(china)) print("压缩后图片大小:",new_china.size) print("压缩后图片占内存大小:",sys.getsizeof(new_china))
运行结果:
原图片:
压缩后图片:
图片各参数:
原文:https://www.cnblogs.com/rushB/p/12724735.html