<p>我在<code>list(contour)</code>的输出上做了更多的工作,以便根据上面提供的答案了解轮廓数学。咖啡. 在</p>
<p>1)我的测试图像出错了。我以为这是一个二值图像,而实际上它是一个灰度图像和一些其他颜色。(感谢数学。咖啡). 所以我只测试了一张黑白图像。这一次,<code>list(contour)</code>给出了4个值的结果,当在图像上绘制时,这些值是方框的四个角。在</p>
<p><img src="https://i.stack.imgur.com/yvC2E.jpg" alt="New output of image in question"/></p>
<p>所以当我们使用等高线等高线'函数,绘制连接所有这些顶点的线。所以我假设个人简历存储轮廓顶点的位置,该轮廓实际上是一个多边形。在</p>
<p>2)为了再次测试,我拍摄了另一张T形图像。在</p>
<p><img src="https://i.stack.imgur.com/z0YB1.png" alt="test-image-2"/></p>
<p>为此,我希望有8个值的列表,它们是T的8个角</p>
<p><img src="https://i.stack.imgur.com/HlVZk.jpg" alt="Output of image 2"/></p>
<p>“list(contour)”打印以下包含10个值的列表。(2个额外值可能是由于我的图纸错误)</p>
<pre><code>[(92, 58), (92, 108), (174, 108), (175, 109), (175, 239), (225, 239), (225, 109), (226, 108), (285, 108), (285, 58)]
</code></pre>
<p>这意味着个人简历创建cvseq对象。里面存储着我上面假设的值。在</p>
<p>3)以上示例只找到一个轮廓。当发现多个等高线时,会出现什么情况?我没有清楚地理解多重连锁序列的概念数学。咖啡. 为了验证这一点,我拍了第三张照片。在</p>
<p><img src="https://i.stack.imgur.com/tiiHY.png" alt="test image 3"/></p>
<p>现在个人简历找到三个轮廓。记住,每个轮廓都是由四个角组成的。这三个列表存储在一个cvseq对象中,指针仅指向第一个轮廓,即仅第一个框的顶点列表。所以用上面的代码,只画一个盒子的角。在</p>
<p>为了得到第二个顶点的列表,我们使用contour.h_next函数(感谢数学。咖啡,直到现在我才知道它的功能)。现在它指向第二个盒子的轮廓。因此,我们遍历其中的所有列表。在</p>
<p>所以我添加了一个简单的while循环,如下所示:</p>
^{pr2}$
<p>我有三张单子对应着三个盒子的角:</p>
<pre><code>[(196, 237), (196, 279), (357, 279), (357, 237)]
[(141, 136), (141, 201), (346, 201), (346, 136)]
[(33, 39), (33, 92), (206, 92), (206, 39)]
</code></pre>
<p>以及输出图像:</p>
<p><img src="https://i.stack.imgur.com/aoBSX.jpg" alt="Output of image 3"/></p>
<p>所以你可以预期一个圆的输出是什么,“它有大量的顶点”。在</p>
<p>现在一切都很简单了。我无法掌握轮廓值。这就是为什么,这么混乱。谢谢。在</p>
<p>更新-1:</p>
<p>关于新的<code>cv2</code>模块中轮廓的更多详细信息如下:<a href="http://opencvpython.blogspot.com/2012/06/hi-this-article-is-tutorial-which-try.html" rel="nofollow noreferrer">Contours -1 : Getting Started</a></p>
<p>更新-2:</p>
<p>对于cv2,所有这些解释都是正确的。链条大约是\u简单。但是如果我们使用cv2.CHAIN_approach_NONE,我们会得到轮廓上的所有点。本文通过示例详细解释了这一点:<a href="http://opencvpython.blogspot.in/2013/01/contours-5-hierarchy.html" rel="nofollow noreferrer">Contours - 5 : Hierarchy</a></p>