1. 应用K-means算法进行图片压缩
读取一张图片
观察图片文件大小,占内存大小,图片数据结构,线性化
用kmeans对图片像素颜色进行聚类
获取每个像素的颜色类别,每个类别的颜色
压缩图片生成:以聚类中收替代原像素颜色,还原为二维
观察压缩图片的文件大小,占内存大小
源代码如下:
# 应用 K-means算法进行图片压缩 from sklearn.cluster import KMeans import matplotlib.pyplot as plt import matplotlib.image as img import numpy as np import sys plt.rcParams['font.sans-serif'] = ['SimHei'] # 设置字体 # 读取图片 img = img.imread("./images/test.png") # 图片路径 plt.title("原始图片") plt.imshow(img) plt.show() # 观察图片文件大小,占内存大小,图片数据结构,线性化 print("图片文件大小:", img.size) print("图片占内存大小:", sys.getsizeof(img)) print("图片数据结构为:", img) x = img.reshape(-1, 3) # 将图片信息转为数组 print("图片线性化:", x) # 用kmeans对图片像素颜色进行聚类 y = KMeans(n_clusters=16) # 模型构建(聚类中心为16) y.fit(x) # 模型训练 # 获取每个像素的颜色类别,每个类别的颜色 y_kmeans = y.predict(x) # 模型预测 kc = y.cluster_centers_ # 聚类中心 print(kc) # 查看聚类中心(颜色) # 压缩图片生成:以聚类中收替代原像素颜色,还原为二维 new_img = kc[y_kmeans].reshape(img.shape) # 用聚类中心颜色代替原像素颜色 new_img = new_img.astype(np.uint8) # 观察压缩图片的文件大小,占内存大小 plt.title("压缩后图片") plt.imshow(new_img) plt.show() plt.imsave("./images/new_img.png") print("压缩图片文件大小:", new_img.size) print("压缩图片占内存大小:", sys.getsizeof(new_img))
运行结果如下:




2. 观察学习与生活中可以用K均值解决的问题。
从数据-模型训练-测试-预测完整地完成一个应用案例。
这个案例会作为课程成果之一,单独进行评分。
浙公网安备 33010602011771号