欢迎访问宙启技术站
智能推送

用imageio库编写Python程序来提取图像的主要颜色

发布时间:2023-12-25 04:03:01

import imageio

import numpy as np

import matplotlib.pyplot as plt

from sklearn.cluster import KMeans

# 读取图像

image = imageio.imread('example.jpg')

# 获取图像数据的形状

rows, columns, channels = image.shape

# 将图像数据重塑为一维数组

image_data = image.reshape(rows * columns, channels)

# 使用K-means算法将像素值聚类为主要颜色

kmeans = KMeans(n_clusters=5)

kmeans.fit(image_data)

# 获取主要颜色的像素值和聚类中心

main_colors = kmeans.cluster_centers_.astype(int)

# 使用主要颜色重新生成图像

new_image_data = np.zeros_like(image_data)

for i, label in enumerate(kmeans.labels_):

    new_image_data[i] = main_colors[label]

# 将一维数组形式的图像数据重塑回原始图像形状

new_image = new_image_data.reshape(rows, columns, channels)

# 显示原始图像和提取的主要颜色图像

fig, axes = plt.subplots(1, 2, figsize=(10, 5))

axes[0].imshow(image)

axes[0].set_title('Original Image')

axes[0].axis('off')

axes[1].imshow(new_image)

axes[1].set_title('Main Colors Image')

axes[1].axis('off')

plt.tight_layout()

plt.show()

以上代码是使用imageio库来读取图像,然后使用K-means算法将图像像素值聚类为主要颜色的一个例子。

首先,使用imageio.imread()函数读取图像,并获取图像数据的形状。然后,将图像数据重塑为一维数组,以便使用K-means算法进行聚类。

接下来,创建一个K-means对象,并指定聚类的数量为5。然后,使用fit()方法对图像数据进行聚类,从而获取主要颜色的聚类中心。

然后,创建一个与原始图像数据大小相同的数组,用于存储根据聚类结果重新生成的图像数据。通过遍历原始图像数据的每个像素,并根据其所属的聚类标签,将其替换为对应的聚类中心值。

最后,将重新生成的图像数据进行重塑,得到维持原始图像形状的图像。使用matplotlib库的imshow()函数以及subplot()函数,将原始图像和提取的主要颜色图像显示在一个图像中。

通过运行以上代码,可以看到原始图像和提取的主要颜色图像。这个例子演示了如何使用imageio库以及sklearn库的K-means算法来提取图像的主要颜色。