In[1]:
In[2]:
In[3]:
In[4]:
In[5]:
In[6]:
In[7]:
Out[5]:
4
The size of the image will be reduced by a factor of 4.0
Compression rate = 75.0%
# 引包
import numpy as np
from scipy import misc
from sklearn import cluster
import matplotlib.pyplot as plt
# 读取图片
# input_file = "/home/ubuntu/flower.jpg"
input_file = "D:/数据挖掘/实验/flower.jpg"
# 设置图片的压缩比例
num_bits = 2
# 判断图片的压缩比例是否在1-8之间,不在时会触发类型错误
if not 1 <= num_bits <= 8:
raise TypeError('Number of bits should be between 1 and 8')
# 使用power()函数计算num_bits的二进制中可能的聚类数量
# np.power(2, num_bits)表示将2的num_bits次方
num_clusters = np.power(2, num_bits)
num_clusters
# 计算压缩的比例,保留两位小数,即压缩后图像的大小与原始图像大小之间的比值
compression_rate = round(100 * (8.0 - num_bits) / 8.0,2)
# 图片压缩的因子,即原始图像大小与压缩后图像大小之间的比例
print ("The size of the image will be reduced by a factor of", 8.0 / num_bits)
print ("Compression rate = " + str(compression_rate) + "%")
# 加载需要压缩的图片
from PIL import Image
# Image.open()打开指定路径的图片文件,.convert('L')将其转换为灰度图像
# dtype=np.uint8参数表示数组的数据类型是无符号8位整数
input_image = np.array(Image.open(input_file).convert('L'), dtype=np.uint8)
# 查看结果
# input_image