4.K均值算法--应用
1. 应用K-means算法进行图片压缩
读取一张图片
观察图片文件大小,占内存大小,图片数据结构,线性化
用kmeans对图片像素颜色进行聚类
获取每个像素的颜色类别,每个类别的颜色
压缩图片生成:以聚类中收替代原像素颜色,还原为二维
观察压缩图片的文件大小,占内存大小
2. 观察学习与生活中可以用K均值解决的问题。
从数据-模型训练-测试-预测完整地完成一个应用案例。
这个案例会作为课程成果之一,单独进行评分。
1答:
from sklearn.datasets import load_sample_image
from sklearn.cluster import KMeans
import matplotlib.pyplot as plt
import sys
import matplotlib.image as img
import numpy as np
a = load_sample_image("china.jpg")
#
abc = img.imread('E:/AnacondaSpace/ff.jpg')
b = sys.getsizeof(abc)
#print("图片占内存的大小", b)
#print('原图片文件大小:', abc.size)
#print('原图片的数据结构:\n', abc)
plt.imshow(abc)
#plt.show()
abc = abc[::3, ::3] # 降低图片的分辨率
X = abc.reshape(-1, 3)
#print(abc.shape, X.shape)
n_colors = 64
model = KMeans(n_colors)
labels = model.fit_predict(X)
colors = model.cluster_centers_
new_image = colors[labels].reshape(abc.shape)
new_image = new_image.astype(np.uint8)
print('压缩图片文件大小:', new_image.size)
print('压缩图片占内存大小:', sys.getsizeof(new_image))
print('压缩图片的数据结构:\n', new_image)
2)答: