python - 显示分水岭算法的分割

标签 python algorithm opencv image-segmentation watershed

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

有没有什么方法可以做到这一点,就像我们在使用简单线性迭代聚类函数和标记边界函数的简单线性迭代聚类超像素分割中所做的那样

使用 Opencv 和 python。

谢谢。

最佳答案

先关注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()

关于python - 显示分水岭算法的分割,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50363071/

相关文章:

python - 如何将数组上采样到任意大小?

python - 如何正确地将 Python 脚本输出重定向到文件?

c++ - 增强算法

python - 使用启动文件组合两个节点,结果 cv2.imwrite() 无法正常工作

c++ - 查找 GpuMat 所在的 GPU

javascript - 在 aws lambda 上使用 child_process spawn 作为 python 脚本

python - 将 SocksiPy 与 SSL 结合使用

.NET 正确排序 double 作为数字字符串

java - 生命游戏振荡器和宇宙飞船不工作

opencv - 使用 opencv 跟踪模式,使每个节点仅访问一次(欧拉路径)