一、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))
Z = np.float32(Z)
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,
[K],
[0,K])
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()
三、实际效果
|