官网参见https://docs.opencv.org/3.4.1/d9/d8b/tutorial_py_contours_hierarchy.html
本篇学习的是轮廓的层次结构,例如:轮廓之间的父子关系。
前面几篇中,我们已经学习了一些opencv提供的有关轮廓的函数,例如下面。
image, contours, hierarchy = cv.findContours( image, mode, method[, contours[, hierarchy[, offset]]] )
当我们使用 cv.findContours()函数寻找图像的轮廓时候,需要传入参数Contour Retrieval Mode(轮廓提取模式)。通常我们会使用cv.RETR_LIST或者cv.RETR_TREE, 效果都不错。那么它们是什么意思呢?
我们再来看看函数的输出,有3个数组,第1个是图像,第2个是轮廓,第3个hierarchy 我们称为层次结构。在前面的文章中还从来没有使用过hierarchy。那么什么是层次结构?它的作用是什么?它和轮廓提取模式又是什么关系呢?
这就是本篇所要学习的内容。
1.什么是层次结构-hierarchy
通常我们会在图像中使用cv.findContours()函数寻找物体。物体在图像中处于各种位置,有时候一些形状会在另外一些形状的内部,就像嵌套图形一样。此时,我们把外部的形状称为父亲,内部的形状称为儿子。这样一来,图像中的轮廓之间就有了某种关系。我们也就可以确定某个轮廓和其他轮廓之间的关系,例如:它是其他轮廓的子轮廓,或者是其他轮廓的父轮廓。这种关系就是层次结构-hierarchy
观察上图,有几个图形编号为0-5。最外边矩形框的外轮廓编号2,内轮廓编号2a。