假如我们需要提取下图中的颜色,可以通过使用 K-means 聚类算法对图像进行颜色聚类分析,并生成一个基于聚类中心(即最具代表性的颜色)的RGB值和调色板。
通过使用 K-means 聚类算法对图像进行颜色聚类分析,并生成一个基于聚类中心(即最具代表性的颜色)的RGB值和调色板。
导入必要的库
import numpy as np
import matplotlib.pyplot as plt
import matplotlib.image as mpimg
from sklearn.cluster import KMeans
读取图像
image = mpimg.imread('poland-landscape.jpg')
获取图像尺寸
w, h, d = image.shape
pixels = image.reshape(w * h, d)
K-means聚类,n_init设置为auto
n_colors = 15
kmeans = KMeans(n_clusters=n_colors, random_state=42, n_init='auto').fit(pixels)
获取聚类中心(调色板)
palette = np.uint8(kmeans.cluster_centers_)
print(palette)
显示调色板
plt.imshow([palette])
plt.axis('off')
plt.savefig('rgb_color_chart.png', dpi=300, bbox_inches='tight')
plt.show()
运行结果如下:
聚类得到的15个RGB值如下:
[[ 9 43 77]
[ 70 165 209]
[145 118 72]
[ 47 122 160]
[154 157 153]
[ 11 26 38]
[ 79 91 93]
[212 164 37]
[ 43 58 64]
[231 227 217]
[ 6 125 184]
[216 172 110]
[ 95 78 39]
[105 133 146]
[ 20 78 118]]
参考资料:
https://www.douyin.com/note/7413545987140095241