1. 应用K-means算法进行图片压缩
读取一张图片
观察图片文件大小,占内存大小,图片数据结构,线性化
用kmeans对图片像素颜色进行聚类
获取每个像素的颜色类别,每个类别的颜色
压缩图片生成:以聚类中收替代原像素颜色,还原为二维
观察压缩图片的文件大小,占内存大小
完整的代码:
1 from matplotlib import pyplot as plt 2 from sklearn.cluster import KMeans 3 import matplotlib.image as img 4 import numpy as np 5 import sys 6 #1. 应用K-means算法进行图片压缩 7 # 读取一张图片 8 sunflower=plt.imread("D:\college3-2\4机器学习算法基础\image\sunflower.jpg") 9 plt.imshow(sunflower) 10 plt.show() 11 print("原图片文件大小: ",sunflower.size) 12 print("原图片占内存大小: ",sys.getsizeof(sunflower)) 13 print("原图片数据结构: ",sunflower.shape," ",sunflower) 14 image = sunflower[::6, ::6] # 降低图片分辨率 15 print(image.shape) 16 X = image.reshape(-1, 3) # 改变数组的形状 17 print(X.shape) 18 n_colors = 64 19 model = KMeans(n_colors) # 聚类颜色64类,利用Kmeans对图片进行压缩 20 labels = model.fit_predict(X) # 训练模型,获取每个像素的颜色类别,每个类别的颜色 21 colors = model.cluster_centers_ # 聚类中心 22 new_image = colors[labels].reshape(image.shape) # 还原每个像素具体的颜色 23 plt.imshow(new_image.astype(np.uint8)) # 展示压缩后的图片 24 plt.show() 25 print("压缩后图片文件大小: ",new_image.size) 26 print("压缩后占内存大小: ",sys.getsizeof(new_image)) 27 img.imsave("D:\college3-2\4机器学习算法基础\image\sunflower2.jpg",new_image.astype(np.uint8)) # 保存图片
2. 观察学习与生活中可以用K均值解决的问题。
(从数据-模型训练-测试-预测完整地完成一个应用案例。这个案例会作为课程成果之一,单独进行评分。)
见期末大作业