返回顶部

Python对图片进行颜色分析并提供图片中的主要颜色以及其相应的出现频率

from sklearn.cluster import KMeans

# pip install scikit-learn
import numpy as np
from PIL import Image

# Define the number of colors to extract
n_colors = 5

image_path = (
    input("选择图片:") or r"D:\Download\8f.jpeg"
)
img = Image.open(image_path)

# Convert image to RGB array
img_array = np.array(img)
img_array = img_array.reshape((img_array.shape[0] * img_array.shape[1], 3))

# Use KMeans clustering to find most dominant colors
kmeans = KMeans(n_clusters=n_colors)
kmeans.fit(img_array)

# Get the RGB values of the centroids
centroids = kmeans.cluster_centers_

# Count the number of pixels associated with each cluster
histogram = np.histogram(kmeans.labels_, bins=n_colors, range=(0, n_colors))

# Calculate the percentage of each color
percentages = (histogram[0] / img_array.shape[0]) * 100

# Sort colors by percentage in descending order
sorted_indices = np.argsort(percentages)[::-1]
sorted_centroids = centroids[sorted_indices]
sorted_percentages = percentages[sorted_indices]

colors_list = []
# Print the dominant colors and their percentages in descending order
for i in range(n_colors):
    color_info = {}
    color_info[
        "rgb"
    ] = f"RGB({sorted_centroids[i][0]:.0f}, {sorted_centroids[i][1]:.0f}, {sorted_centroids[i][2]:.0f})"
    color_info["percentage"] = sorted_percentages[i]
    colors_list.append(color_info)
    print(
        f"Color {i + 1}: RGB({sorted_centroids[i][0]:.0f}, {sorted_centroids[i][1]:.0f}, {sorted_centroids[i][2]:.0f}) - {sorted_percentages[i]:.2f}%"
    )

print("*******************************************")
print(colors_list)

1692347459702.png

暂无评论