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