- 用函数 cv2.fifindContours 来查找轮廓,我们需要传入第二个参数:轮廓提取模式(Contour_Retrieval_Mode)。
还有些情况,一个形状在另外一个形状的内部。这种情况下我们称外部的形状为父,内部的形状为子。按照这种方式分类,一幅图像中的所有轮廓之间就建立父子关系。这样我们就可以确定一个轮廓与其他轮廓是怎样连接的,比如它是不是某个轮廓的子轮廓,或者是父轮廓。这种关系就成为组织结构。 - OpenCV 使用一个含有四个元素的数组表示。[Next,Previous,First_Child,Parent]。
1,Next 表示同一级组织结构中的下一个轮廓。在同一级没有 Next。这时 Next=-1。
2,Previous 表示同一级结构中的前一个轮廓。没有 Previous,所以 Previous=-1。
3,First_Child 表示它的第一个子轮廓。
4,Parent 表示它的父轮廓。 - 轮廓检索模式
1,RETR_LIST 从解释的角度来看,应是最简单的。它只是提取所有的轮廓,而不去创建任何父子关系。换句话说就是“人人平等”,它们属于同一级组织轮廓。所以在这种情况下,组织结构数组的第三和第四个数都是 -1。但是,很明显,Next 和 Previous 要有对应的值。如果你不关心轮廓之间的关系,这是一个非常好的选择。
2,RETR_EXTERNAL 如果你选择这种模式的话,只会返回最外边的的轮廓,所有的子轮廓都会被忽略掉。当你只想得到最外边的轮廓时,你可以选择这种模式。
3,RETR_CCOMP 在这种模式下会返回所有的轮廓并将轮廓分为两级组织结构。例如,一个对象的外轮廓为第 1 级组织结构。而对象内部中空洞的轮廓为第 2 级组织结构,空洞中的任何对象的轮廓又是第 1 级组织结构。空洞的组织结构为第 2 级。
4,RETR_TREE 终于到最后一个了,也是最完美的一个。这种模式下会返回所有轮廓,并且创建一个完整的组织结构列表。它甚至会告诉你谁是爷爷,爸爸,儿子,孙子等。
OpenCV-Python官方教程-14-轮廓的层次结构
最新推荐文章于 2023-12-06 08:21:33 发布