什么是层级?
一般来说我们用cv2.findContours()函数来检测图像里的目标,有时候目标在不同的地方,但是在有些情况下,有些图形在别的图形里面,就像图形嵌套,在这种情况下,我们把外面那层图形叫做parent,里面的叫child。这样图形里的轮廓之间就有了关系。我们可以指定一个轮廓和其他之间的是如何连接的,这种关系就是层级。
每个轮廓有他自己的关于层级的信息,谁是他的孩子,谁是他的父亲等。OpenCV用一个包含四个值得数组来表示:[Next, Previous, First_Child, Parent]
- “Next表明同一层级的下一个轮廓”
- “Previous指同层级的前一个轮廓”
- “First_Child指它的第一个孩子轮廓”
- “Parent指它的父轮廓索引”
如果没有孩子或者父亲,就为-1
cv2.findContours() 中Contour Retrieval Mode参数
- RETR_LIST 它获取所有轮廓,但是不建立父子关系,他们都是一个层级
- RETR_EXTERNAL 它返回最外层的。所有孩子轮廓都不要
- RETR_CCOMP 这个模式获取所有轮廓并且把他们组织到一个2层结构里,对象的轮廓外边界在等级1里,轮廓内沿(如果有的话)放在层级2里。如果别的对象在它里面,里面的对象轮廓还是放在层级1里,它的内沿在层级2.
- RETR_TREE 它取回所有的轮廓并且创建完整的家族层级列表