第九次作业

本文通过使用KMeans聚类算法实现图片压缩,介绍了如何加载图片、缩小分辨率、重塑数组及聚类过程,最终展示了压缩前后图片尺寸对比。

利用KMeans进行图片的压缩:

代码:

from sklearn.datasets import load_sample_image
from matplotlib import pyplot as plt
from sklearn.cluster import KMeans
import numpy as np

china = load_sample_image('china.jpg')
plt.imshow(china)
plt.show()

# mtaplotlib加载图片
import matplotlib.image as img
import matplotlib.pylab as plt
#myimg = img.imread(r'images\menghuan.jpg')
myimg = load_sample_image('china.jpg')
plt.imshow(myimg)
plt.show()

# 若只取图片的颜色列,会导致图片失真
myimgs = myimg[:,:,0]
plt.imshow(myimgs)
plt.show()

# 缩小分辨率
myimgs2 = myimg[::3,::3]
plt.imshow(myimgs2)
plt.show()

# 重造数组
myimgs2des = myimgs2.reshape(-1,3)


# 聚类
est = KMeans(n_clusters=64)
model = est.fit(myimgs2des)

# 拿到中心和每个元素对应的类别
colors = model.cluster_centers_
labels = model.predict(myimgs2des)

# 进行颜色填充(利用nympy的数组的数据结构)
# 以colors作为主体,labels作为下标,每个元素都替换成相应类别对应的中心值
new_images = colors[labels]

# 还原成原来的维度并转换数据类型
new_images = new_images.reshape(myimgs2.shape)
new_images = new_images.astype(np.uint8)

# 并画图
plt.imshow(new_images)
plt.show()

# 存成文件
plt.imsave('images/china.jpg',myimg)
plt.imsave('images/chinasmall.jpg',new_images)

# 对比
size1 = sys.getsizeof('images/china.jpg')
size2 = sys.getsizeof('images/chinasmall.jpg')
print('压缩前:'+str(size1),"\t压缩后:"+str(size2))

 

截图:

 

贝叶斯解题过程照片:

转载于:https://www.cnblogs.com/traces2018/p/9892330.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值