Contours Hierarchy and order in OpenCV

Opencv中的轮廓是形状分析以及对象检测和识别的非常有用的工具。本文将记录findContours函数,在不同的轮廓检索模式(Contour Retrieval Mode)下,所得到的轮廓的层次结构,即Contours中的父子关系,以及轮廓的排序规则。

参考资料

本文中的部分图像来源于上述链接,在此致谢原作者!

前言

我们先来了解一下findContours函数的参数,如下所示。

在findContours函数中,RETR_FLOODFILL是一种比较特殊的存在,介绍该模式的资料非常少,本文也暂不介绍。接下来,我们来测试findContours设置不同的Contour Retrieval Mode时返回轮廓的层次结构与排序规律。

1. Hierarchy and order in RETR_EXTERNAL


CV_RETR_EXTERNAL

根据图片以及输出轮廓的外接矩形(boundingRect)的信息可知,在CV_RETR_EXTERNAL模式下,输出轮廓的排序方式以每个轮廓的boundingRect的左上角Y坐标降序排列。

2. Hierarchy and order in RETR_LIST


CV_RETR_LIST

将【Hierarchy and order in RETR_EXTERNAL】小节代码中findContours函数的参数mode修改为CV_RETR_LIST,可以观察到同一张图片中CV_RETR_LIST模式下的轮廓信息输出。

在CV_RETR_LIST模式下,输出轮廓的排序方式以每个轮廓的boundingRect的左上角Y坐标降序排列。


3. Hierarchy and order in RETR_CCOMP

CV_RETR_COM

将【Hierarchy and order in RETR_EXTERNAL】小节代码中findContours函数的参数mode修改为CV_RETR_CCOMP,可以观察到同一张图片中CV_RETR_CCOMP模式下的轮廓信息输出。

在CV_RETR_CCOMP模式下,同一层级的输出轮廓的排序方式以每个轮廓的boundingRect的左上角Y坐标降序排列。
为了更清晰的说明CV_RETR_CCOMP模式下各层级轮廓的关系,我们使用了参考链接中的图,并对图中标注的序号根据实际情况进行了修改。

4. Hierarchy and order in RETR_TREE

CV_RETR_TREE

将【Hierarchy and order in RETR_EXTERNAL】小节代码中findContours函数的参数mode修改为CV_RETR_TREE,可以观察到同一张图片中CV_RETR_TREE模式下的轮廓信息输出。

在CV_RETR_TREE模式下,同一层级的输出轮廓的排序方式以每个轮廓的boundingRect的左上角Y坐标降序排列。

为了更清晰的说明CV_RETR_TREE模式下各层级轮廓的关系,我们使用了参考链接中的图,并对图中的序号根据实际输出进行了修改。

本文到此结束,感谢阅读,欢迎关注。

发表评论

您的电子邮箱地址不会被公开。 必填项已用*标注

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据

Fork me on GitHub