【问题标题】:OpenCV - RETR_EXTERNAL not working after Otsu's binarizationOpenCV - 在 Otsu 的二值化后,RETR_EXTERNAL 不起作用
【发布时间】:2018-09-26 07:58:48
【问题描述】:

我已将 Otsu 的二值化应用于一张图像并得到此结果

之后,我使用这段代码来获取四个主要形状周围的框:

img = cv.imread('test_bin.jpg', 0)
_, cnts, _ = cv.findContours(img.copy(), cv.RETR_EXTERNAL, cv.CHAIN_APPROX_NONE)

for cnt in cnts:
    x,y,w,h = cv.boundingRect(cnt)
    cv.rectangle(img,(x,y),(x+w,y+h),(0,255,0),2)

cv.imwrite('test_cnt.jpg', img)

但是,我什么也没得到。它只返回一个轮廓,我想它可能是完整的图像本身。我看到它适用于 RETR_TREE,但我需要它与 RETR_EXTERNAL 一起用于下一个操作。这里有什么问题?

【问题讨论】:

    标签: python opencv opencv-contour


    【解决方案1】:

    根据 OpenCV 轮廓 documentation:

    在 OpenCV 中,寻找轮廓就像从黑色中寻找白色物体 背景。所以请记住,要找到的对象应该是白色的 背景应该是黑色的。

    但在你的情况下,这显然与要求相反,所以你只需要反转你的图像,它可以简单地做到:

    img = cv2.bitwise_not(img)
    

    另外,请注意:

    为了获得更好的准确性,请使用二值图像。所以在找到轮廓之前, 应用阈值或精确边缘检测。

    我使用了您的图像并在反转图像后得到了以下结果。如果你想去掉小框,那么只需使用cv2.threshold 来获取二进制图像。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-08-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-05-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多