【问题标题】:How to read the result of cv2.findContours?如何读取 cv2.findContours 的结果?
【发布时间】:2023-03-31 23:38:02
【问题描述】:

我有一个形状为(340,490) 的二进制二维矩阵b 并在其上应用cv2.findContours(b,1,2)。结果是一个形状为(6, 2, 1) 的3D 数组,如[[90,3],[5,60],[90, 110],[5,135],[3,200],[3,3]]。我无法阅读它。我申请了cv2.drawContours(b,contours, -1, (0,0,255), 3) 它工作得很好。因为我在原来的b上有一堆吵。我不知道为什么它只能通过 12 号来修复。这些数字代表什么?

【问题讨论】:

    标签: python image opencv computer-vision opencv-contour


    【解决方案1】:

    cv2.drawContours() 函数返回 2 个值:

    第一个在“Contours”,第二个是“Hierarchy”。

    轮廓包含图像中检测到的每个轮廓的边界点坐标。

    要查找轮廓的数量,请使用:

    len(Contours)
    

    这将给出图像中找到的轮廓数。

    现在“轮廓”中的每个元素都将属于以下类型:

    Contours[i] = [[[x1, y1]],
                   [[x2, y2]],
                   [[x3, y3]],
                   [[x4, y4]],
                   [[x5, y5]],
                   ...
                   [[xn, yn]]]
    

    其中 x 和 y 是图像中该轮廓的边界点的坐标,n 是该轮廓的边界点的总数。

    要了解返回值“Hierarchy”,refer to this link

    【讨论】:

    • 警告:Contours[i] 中的每个元素都返回一个 3D NumPy 数组,中间有一个单一维度,因此实际上每个轮廓都会得到一个 N x 1 x 2 NumPy 数组。从您格式化Contours[i] 布局的方式可以看出这一点。您可能已经意识到这一点,但您的回答中没有明确说明,应该绝对清楚。
    • @rayryeng 感谢您的评论,我忘了在回答中提及那部分。
    • 另外,我不知道为什么要在两者之间添加单例维度?如果有人知道这背后的原因,请回复。
    • 在 NumPy 和 C++ 中的 OpenCV 库之间进行接口时,它的设计使广播更容易。
    猜你喜欢
    • 2022-01-09
    • 2019-02-11
    • 1970-01-01
    • 2015-12-31
    • 2015-11-21
    • 2019-01-12
    • 1970-01-01
    • 1970-01-01
    • 2017-11-19
    相关资源
    最近更新 更多