opencv计算图片中出现面积最大最经常出现的颜色
- opencv
- K均值聚类算法
- 颜色相似性,欧几里得距离越小,颜色越相似
import math
import cv2
import numpy as np
from sklearn.cluster import KMeans
def find_dominant_color(image, k=2):
# 将图像数据转换为一维数组
image = image.reshape((image.shape[0] * image.shape[1], 3))
# 使用K均值聚类算法对颜色进行聚类
kmeans = KMeans(n_clusters=k,n_init=10)
kmeans.fit(image)
# 获取每个簇的像素数量
counts = np.bincount(kmeans.labels_)
# 返回数量最多的簇的中心点,即最常见的颜色
return kmeans.cluster_centers_[np.argmax(counts)]
def compute_color_similarity(color1,color2):
distance = math.sqrt(sum((c1-c2)**2 for c1, c2 in zip(color1, color2)))
return distance
def show_most_common_color(dominant_color):
# 创建一个新的图像,所有像素都设置为给定的BGR颜色值
image = np.zeros((300, 300, 3), np.uint8)
image[:] = dominant_color
# 显示图像
cv2.imshow('Image', image)
cv2.waitKey(0)
if __name__ == '__main__':
# 读取图像
image = cv2.imread('test1.jpg')
# 查找图像中最常见的颜色
dominant_color = find_dominant_color(image)
# 展示一下,最常见的颜色
show_most_common_color(dominant_color)
# 输出结果
common_color = dominant_color[::-1]
print("Dominant color rgb:",common_color )
# 计算两个颜色的相似性
# base_color2 = [186, 113, 125]
base_color = [69, 123, 209]
similarity = compute_color_similarity(common_color,base_color)
print("similarity = :",similarity)