0
点赞
收藏
分享

微信扫一扫

opencv python 主色彩提取

yellowone 2022-03-15 阅读 59

opencv python 主色彩提取

一、KMeans是什么?

KMeans会计算出每个聚类的像素的中心值,根据中心值可以获取图像的主色彩及分布的情况,绘制出图像对应的取色卡,这个方面在检测图片色彩偏差的时候特别有用

二、具体步骤

1.读入图像

2.建立KMenas模型

3.使用KMeans聚类

4.统计各个聚类比率

5.根据比率建立色卡

三、代码示例

import numpy as np
import cv2


img = cv2.imread('D:\\Project-2021\\ceramic tile\\img\\QB24107_C.jpg')

Z = img.reshape((-1,3))
# 转换成 np.float32
Z = np.float32(Z)
# 定义 criteria, 聚类的数量 
criteria = (cv2.TERM_CRITERIA_EPS + cv2.TERM_CRITERIA_MAX_ITER, 10, 1.0)
K = 3
ret,label,center=cv2.kmeans(Z,K,None,criteria,10,cv2.KMEANS_RANDOM_CENTERS)


label_map=label.reshape((img.shape[0],img.shape[1],1))
label_map=np.uint8(label_map)

hist = cv2.calcHist([label_map],
    [0], #使用的通道
    None, #没有使用mask
    [K], #HistSize
    [0,K]) 

# 对直方图进行归一化,使得总和为1
hist = hist.astype("float")
hist /= hist.sum()
# 绘制每一聚簇的相对百分比
bar = np.zeros((50, 300, 3), dtype="uint8")
startX = 0
for (percent, color) in zip(hist, center):
    endX = startX + (percent * 300)
    cv2.rectangle(bar, (int(startX), 0), (int(endX), 50),color.astype("uint8").tolist(), -1)
    startX = endX

cv2.imshow('bar',bar)
cv2.imshow('IMG',img)
cv2.waitKey(0)
cv2.destroyAllWindows()

三、实际效果

实际效果

举报

相关推荐

0 条评论