讀取一張示例圖片或本身準備的圖片,觀察圖片存放數據特色。算法
根據圖片的分辨率,可適當下降分辨率。ui
再用k均值聚類算法,將圖片中全部的顏色值作聚類。spa
而後用聚類中心的顏色代替原來的顏色值。code
造成新的圖片。blog
觀察原始圖片與新圖片所佔用內存的大小。圖片
將原始圖片與新圖片保存成文件,觀察文件的大小。內存
from sklearn.datasets import load_sample_image import matplotlib.pyplot as plt from sklearn.cluster import KMeans #load_sample_image包的示例圖片加載 Yi = load_sample_image("china.jpg") plt.imshow(Yi) plt.show() print(Yi.shape)
fl = load_sample_image("flower.jpg")#原始圖片 plt.imshow(fl) plt.show() print(fl.shape) plt.imshow(fl[:,:,-2]) #改變圖片色調,使圖片失真 plt.show()
# mtaplotlib加載圖片 import matplotlib.image as img bsb = img.imread("E:\software package\Babysbreath.jpeg") #讀入圖片路徑 plt.imshow(bsb) plt.show() print(bsb.shape)
bsbth = bsb[::3,::3] #下降分辨率 plt.imshow(bsb) plt.show() n_colors =64 #(256,256,256) Z= bsbth.reshape(-2,6) model= KMeans(n_colors) labels = model.fit_predict(Z) #每一個點的顏色分類,0-63 colors = model.cluster_centers_ #64個聚類中心,顏色值 print(bsb.shape,bsbth.shape,Z.shape)
#聚類 import numpy as np n_colors= 64 #(256,256,256) model= KMeans(n_colors) labels = model.fit_predict(Z) #每一個點的顏色分類,0-63 colors = model.cluster_centers_ #64個聚類中心,顏色值 # 以colors做爲主體,labels做爲下標,每一個元素都替換成相應類別對應的中心值 new_bsbth = colors[labels] # 還原成原來的維度並轉換數據類型 new_bsbth = new_bsbth.reshape(bsbth.shape) plt.imshow(new_bsbth.astype(np.uint8)) plt.show plt.imshow(bsbth); plt.show()
#保存圖片 plt.imsave('C:\\Users\\E5-572\\Desktop\\bella\\bsb.jpg',bsb) plt.imsave('C:\\Users\\E5-572\\Desktop\\bella\\bsbth.jpg',bsbth) import sys # 壓縮先後對比 size1 = sys.getsizeof('C:\\Users\\E5-572\\Desktop\\bella\\bsb.jpg') size2 = sys.getsizeof('C:\\Users\\E5-572\\Desktop\\bella\\bsbth.jpg') print('壓縮前:'+str(size1),"\t壓縮後:"+str(size2))
理解貝葉斯定理:get