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
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值