显示分水岭算法的分段

时间:2018-05-16 05:31:49

标签: python algorithm opencv image-segmentation watershed

我是Opencv的新手, 我最近一直在使用分水岭算法, 目前我尝试使用不同的颜色标记来分割图像,但我也希望显示这些片段。

是否有任何方法可以做到这一点,因为我们可以在简单线性迭代聚类中使用简单线性迭代聚类函数和标记边界函数进行超像素分割

使用Opencv和python。

感谢。

1 个答案:

答案 0 :(得分:1)

首先关注THIS DOCUMENTATION以获取图像中的标记。我使用了与本文档中相同的图像。

之后,逐行跟踪此代码并可视化每个变量包含的内容:

在变量markers中为每个唯一连接组件分配唯一值。我正在将markers中存在的值标准化为整数。可以在列表uniq_thresh中提到的特定阈值处获得每个连通分量。

label_hue = np.uint8(179*markers/1)
uniq_thresh = np.unique(label_hue).tolist()
cv2.imshow('label_hue', label_hue)
uniq_thresh.sort(reverse=True)

prev是与原始图像具有相同形状但整个像素值为0的图像。

prev = np.zeros_like(label_hue)

现在,对于列表uniq_thresh中的每个唯一阈值,我显示连接的组件。但是,由于thresh返回的图像的成分高于某个阈值,我将从中减去先前的阈值图像,以获得单个成分。

for th in uniq_thresh:
    print(th)
    ret, thresh = cv2.threshold(label_hue, th, 255, cv2.THRESH_BINARY)
    cv2.imshow('ind', thresh)
    cv2.imshow('ind2', thresh - prev)
    prev = thresh
    cv2.waitKey(0)

cv2.destroyAllWindows()