opencv_k均值聚类算法_计算图片中出现面积最大的颜色

发布时间 2023-06-15 22:50:36作者: 虎虎生威啊

opencv计算图片中出现面积最大最经常出现的颜色

  1. opencv
  2. K均值聚类算法
  3. 颜色相似性,欧几里得距离越小,颜色越相似
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)