我试图应用opencv中的kmeans来分割HSV颜色空间中的图像。在
def leftOffset(src, p_countours):
height, width, size = src.shape
p_width = width/p_countours
o_left = src[0:height, 0:p_width]
HSV_img = cv2.cvtColor(o_left, cv2.COLOR_BGR2HSV)
hue = HSV_img[0]
hue = np.float32(HSV_img)
# Define criteria = ( type, max_iter = 10 , epsilon = 1.0 )
criteria = (cv2.TERM_CRITERIA_EPS + cv2.TERM_CRITERIA_MAX_ITER, 10, 1.0)
# Set flags (Just to avoid line break in the code)
flags = cv2.KMEANS_RANDOM_CENTERS
# Apply KMeans
compactness,labels,centers = cv2.kmeans(hue,2,criteria,10,flags)
centers = np.uint8(centers)
res = centers[labels.flatten()]
res2 = res.reshape((hue.shape))
cv2.imshow("o_left", hue)
cv2.waitKey(0)
我现在可以将kmeans算法应用于K=2的HSVImage[0],如何根据结果得到一个类似图像的阈值?在
谢谢
为了澄清这个问题: 我有基于颜色的验证码,我想分割每个数字。在
我将使用k-均值方法找出主色,并对其中的数字进行分割。在
1)如果你只需要找到主色,为什么不找到每个颜色通道的直方图?找到主通道,然后使用otsu仅分割该通道?例如,如果我只阈值的色调,我可以得到很好的结果。对于这项任务来说,K-means可能是一种过激行为:
2)为什么不使用所有通道进行聚类,而不仅仅是色调?您需要的是聚类->;颜色量化此link应该有用。这是针对opencv 3.0.0版的
注意,对于python 2.4.11,cv2.kmeans有一个稍有不同的接口,您可以使用以下接口:
^{pr2}$我的颜色量化结果并不令人印象深刻。在
我能推荐一个传统的替代品吗?你先去掉非常暗和亮的区域,你可以简单地依赖于从直方图中计算出的色调分量的最频繁值。在
请注意,数字的边界永远不会是绝对准确的,因为周围的颜色是相似的。在
此外,您可以只选择最大blob(根据大小)来抑制外部剩余的小blob。在
结果:
代码:
相关问题 更多 >
编程相关推荐