from cv2 import imread, imwrite
from sklearn.cluster import KMeans
from skimage import io
import numpy as np
def compress_image():
"""
压缩图像
:return:
"""
image = imread('1.png')
rows = image.shape[0]
cols = image.shape[1]
image = image.reshape(image.shape[0] * image.shape[1], 3)
kmeans = KMeans(n_clusters=2, n_init=10, max_iter=200)
kmeans.fit(image)
clusters = np.asarray(kmeans.cluster_centers_, dtype=np.uint8)
labels = np.asarray(kmeans.labels_, dtype=np.uint8)
labels = labels.reshape(rows, cols)
np.save('codebook_img.npy', clusters)
imwrite('compressed_img.png', labels)
def reconstruct_image():
"""
使用压缩后的码本来重建图像
:return:
"""
centers = np.load('codebook_img.npy')
c_image = io.imread('compressed_img.png')
image = np.zeros((c_image.shape[0], c_image.shape[1], 3), dtype=np.uint8)
for i in range(c_image.shape[0]):
for j in range(c_image.shape[1]):
image[i, j, :] = centers[c_image[i, j], :]
imwrite('reconstructed_img.png', image)