作业4
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 matplotlib.image as mpimg import sys #加载样本图像 # image = load_sample_image('china.jpg') #加载本地图片 image = mpimg.imread('image2.jpg') #降维(将二维图片变成一维) X = image.reshape(-1,3) print(image.shape,X.shape) #进行聚类将255*255*255聚成64类 n_colors=64 model=KMeans(n_colors) #一维(273280, 3)对每一个像素进行分类 labels=model.fit_predict(X) #将273280分成64类 colors=model.cluster_centers_ new_image=colors[labels].reshape(image.shape) #显示原图片 plt.imshow(image) plt.show() #显示压缩后的图片 new_image=new_image.astype(np.uint8) plt.imshow(new_image) plt.show() #二次压缩(每三个像素取一个) new_image=new_image.astype(np.uint8)[::3,::3] plt.imshow(new_image) plt.show() print("image Size:",sys.getsizeof(image)) print("new_image Size:",sys.getsizeof(new_image)) import matplotlib.image as img img.imsave('F:\\01.jpg',image) img.imsave('F:\\02.jpg',new_image)
![](https://img2020.cnblogs.com/blog/1786759/202004/1786759-20200419211916340-1664853104.png)
![](https://img2020.cnblogs.com/blog/1786759/202004/1786759-20200419211956894-491360260.png)