读取一张图片
观察图片文件大小,占内存大小,图片数据结构,线性化
用kmeans对图片像素颜色进行聚类
获取每个像素的颜色类别,每个类别的颜色
压缩图片生成:以聚类中收替代原像素颜色,还原为二维
观察压缩图片的文件大小,占内存大小
例题:
‘‘‘ K-Means算法应用:图片压缩(将颜色减少,相似的归为一类) ‘‘‘ from sklearn.datasets import load_sample_image from sklearn.cluster import KMeans import matplotlib.pyplot as plt import numpy as np china = load_sample_image("china.jpg") # image = china[::3, ::3] X = china.reshape(-1, 3) # print(china.shape, image.shape, X.shape) print(china.shape, X.shape) n_colors = 64 # (255, 255, 255) model = KMeans(n_colors) labels = model.fit_predict(X) colors = model.cluster_centers_ # 二维(64, 3) new_image = colors[labels].reshape(china.shape) # (143,214,3) plt.imshow(china) plt.show() plt.imshow(new_image.astype(np.uint8)) plt.show() plt.imshow(new_image.astype(np.uint8)[::3, ::3]) plt.show()
作业:
1 ‘‘‘ 2 1. 应用K-means算法进行图片压缩 3 读取一张图片 4 观察图片文件大小,占内存大小,图片数据结构,线性化 5 用kmeans对图片像素颜色进行聚类 6 获取每个像素的颜色类别,每个类别的颜色 7 压缩图片生成:以聚类中收替代原像素颜色,还原为二维 8 观察压缩图片的文件大小,占内存大小 9 ‘‘‘ 10 from sklearn.cluster import KMeans 11 from pylab import mpl 12 import matplotlib.pyplot as plt 13 import matplotlib.image as mpimg 14 import numpy as np 15 import matplotlib.image as img 16 import sys 17 18 # 解决中文无法显示 19 mpl.rcParams[‘font.sans-serif‘] = [‘SimHei‘] 20 21 photo = mpimg.imread("D://小阔爱//大学课程//机器学习//K均值聚类算法//girl.jpg") 22 plt.title("原图") 23 plt.imshow(photo) 24 plt.show() 25 print("============原图片属性============") 26 print("尺寸:", photo.shape) #显示尺寸 27 print("宽度:", photo.shape[0]) #图片宽度 28 print("高度:", photo.shape[1]) #图片高度 29 print("通道数:", photo.shape[2]) #图片通道数 30 print("数据结构:", type(photo)) #显示类型 31 print("占用内存大小:",sys.getsizeof(photo)) 32 print("总像素个数:", photo.size) #显示总像素个数 33 print("最大像素值:", photo.max()) #最大像素值 34 print("最小像素值:", photo.min()) #最小像素值 35 print("像素平均值:", photo.mean()) #像素平均值 36 37 ‘‘‘ 38 构建模型 39 ‘‘‘ 40 image = photo[::3, ::3] 41 # image.shape 42 x = image.reshape(-1, 3) 43 n_colors = 12 # 颜色类别 44 model = KMeans(n_colors) 45 ‘‘‘ 46 模型训练、预测 47 ‘‘‘ 48 labels = model.fit_predict(x) 49 colors = model.cluster_centers_ # 模型聚类中心 50 new_photo = colors[labels] # 以聚类中收代替原像素颜色 51 new_photo = new_photo.reshape(image.shape) # 还原为二维数组 52 53 plt.title("压缩图") 54 plt.imshow(new_photo.astype(np.uint8)) 55 plt.show() 56 print("============压缩后图片属性============") 57 print("尺寸:", new_photo.shape) #显示尺寸 58 print("宽度:", new_photo.shape[0]) #图片宽度 59 print("高度:", new_photo.shape[1]) #图片高度 60 print("通道数:", new_photo.shape[2]) #图片通道数 61 print("数据结构:", type(photo)) #显示类型 62 print("占用内存大小:",sys.getsizeof(new_photo)) 63 print("总像素个数:", new_photo.size) #显示总像素个数 64 print("最大像素值:", new_photo.max()) #最大像素值 65 print("最小像素值:", new_photo.min()) #最小像素值 66 print("像素平均值:", new_photo.mean()) #像素平均值 67 new_photo = new_photo.astype(np.uint8) 68 img.imsave("D://小阔爱//大学课程//机器学习//K均值聚类算法//new_girl.jpg", new_photo)
从数据-模型训练-测试-预测完整地完成一个应用案例。
这个案例会作为课程成果之一,单独进行评分。
原文:https://www.cnblogs.com/xiaolan-Lin/p/12715411.html