我只是想了解轮廓的含义,当我们使用个人简历函数(我使用的是OpenCV 2.3.1和Python)。我用以下简单的图像进行测试:
在找到轮廓后,我在ipython中应用了以下命令:
In [8]: contour
Out[8]: <cv2.cv.cvseq at 0x90a31a0>
In [10]: list(contour)
Out[10]:
[(256, 190),
(255, 191),
(112, 191),
(255, 191),
(256, 190),
(257, 191),
(257, 190)]
第一个命令说,contour是一个cvSeq对象。在
我在图像上标记了这些点,如下所示(红色圆圈为点):
我不明白这是什么意思。在
所以我的问题是第二个命令(即list(contour))结果中的值表示什么?在
编辑:下面是我使用的代码。在
^{pr2}$
好的,我看了你的照片,你得到了每个区域的顶点。我花了一段时间来解决这个问题,因为我使用的是
cv2
接口,而不是cv
接口。在几件事:
simple.jpeg
中除了0和255之外还有多个灰度值,很可能是由于jpeg压缩。在FindContours
中得到多个区域。在cv.FindContours
返回多个链接序列,您必须迭代以获得所有的econtours。在为了演示,让我们画出所有的轮廓。在
所以我们看到,在你最初的问题中,
list(contours)
的第一个轮廓是正方形底部的一条绿色小条带,你得到的点对应于它的顶点。在在矩形的边缘和角落里有这么多奇怪的小轮廓是因为(我猜)压缩伪影是通过将图像保存为JPEG而引入的,这是有损的。如果你用无损格式(比如PNG或TIFF)保存正方形,你只会得到一个由矩形的角定义的轮廓。在
经验教训:
cv.FindContours
是否给出每个轮廓的“顶点”contours = contours.h_next()
迭代每个轮廓我在
list(contour)
的输出上做了更多的工作,以便根据上面提供的答案了解轮廓数学。咖啡. 在1)我的测试图像出错了。我以为这是一个二值图像,而实际上它是一个灰度图像和一些其他颜色。(感谢数学。咖啡). 所以我只测试了一张黑白图像。这一次,
list(contour)
给出了4个值的结果,当在图像上绘制时,这些值是方框的四个角。在所以当我们使用等高线等高线'函数,绘制连接所有这些顶点的线。所以我假设个人简历存储轮廓顶点的位置,该轮廓实际上是一个多边形。在
2)为了再次测试,我拍摄了另一张T形图像。在
为此,我希望有8个值的列表,它们是T的8个角
“list(contour)”打印以下包含10个值的列表。(2个额外值可能是由于我的图纸错误)
这意味着个人简历创建cvseq对象。里面存储着我上面假设的值。在
3)以上示例只找到一个轮廓。当发现多个等高线时,会出现什么情况?我没有清楚地理解多重连锁序列的概念数学。咖啡. 为了验证这一点,我拍了第三张照片。在
现在个人简历找到三个轮廓。记住,每个轮廓都是由四个角组成的。这三个列表存储在一个cvseq对象中,指针仅指向第一个轮廓,即仅第一个框的顶点列表。所以用上面的代码,只画一个盒子的角。在
为了得到第二个顶点的列表,我们使用contour.h_next函数(感谢数学。咖啡,直到现在我才知道它的功能)。现在它指向第二个盒子的轮廓。因此,我们遍历其中的所有列表。在
所以我添加了一个简单的while循环,如下所示:
^{pr2}$我有三张单子对应着三个盒子的角:
以及输出图像:
所以你可以预期一个圆的输出是什么,“它有大量的顶点”。在
现在一切都很简单了。我无法掌握轮廓值。这就是为什么,这么混乱。谢谢。在
更新-1:
关于新的
cv2
模块中轮廓的更多详细信息如下:Contours -1 : Getting Started更新-2:
对于cv2,所有这些解释都是正确的。链条大约是\u简单。但是如果我们使用cv2.CHAIN_approach_NONE,我们会得到轮廓上的所有点。本文通过示例详细解释了这一点:Contours - 5 : Hierarchy
相关问题 更多 >
编程相关推荐