OpenCV中的分级表示
每个轮廓都有它自己的信息关于它是什么层次,谁是它的孩子,谁是它的父母等等。OpenCV将它表示为一个包含四个值的数组: [Next, Previous, First_Child, Parent],如果没有子元素或父元素,则该字段被视为-1。
- Next表示同一层次的下一个轮廓。
- Previous表示同一层次上的先前轮廓。
- First_Child表示它的第一个子轮廓。
- Parent表示其父轮廓的索引。
轮廓检索模式
1. RETR_LIST
它只是检索所有的轮廓,但不创建任何亲子关系。在这个规则下,父轮廓和子轮廓是平等的,他们只是轮廓。他们都属于同一层级。
例子如下:
轮廓编号 | Next | Previous | First_Child, | Parent |
---|
0 | 1 | -1 | -1 | -1 | 1 | 2 | 0 | -1 | -1 | 2 | 3 | 1 | -1 | -1 | 3 | 4 | 2 | -1 | -1 | 4 | 5 | 3 | -1 | -1 | 5 | 6 | 4 | -1 | -1 | 6 | 7 | 5 | -1 | -1 | 7 | -1 | 6 | -1 | -1 |
2. RETR_EXTERNAL
如果使用此标志,它只返回极端外部标志。所有孩子的轮廓都被留下了。即只关注等级0级成员。
例子如下:(图同上)
轮廓编号 | Next | Previous | First_Child, | Parent |
---|
0 | 1 | -1 | -1 | -1 | 1 | 2 | 0 | -1 | -1 | 2 | -1 | 1 | -1 | -1 |
3. RETR_CCOMP
此标志检索所有轮廓并将其排列为2级层次结构。物体的外部轮廓(即物体的边界)放在层次结构-1中。对象内部孔洞的轮廓(如果有)放在层次结构-2中。如果其中有任何对象,则其轮廓仅在层次结构1中重新放置。以及它在层级2中的漏洞等等。
例子如下:
轮廓编号 | Next | Previous | First_Child, | Parent |
---|
0 | 3 | -1 | 1 | -1 | 1 | 2 | -1 | -1 | 0 | 2 | -1 | 1 | -1 | 0 | 3 | 5 | 0 | 4 | -1 | 4 | -1 | -1 | -1 | 3 | 5 | 7 | 3 | 6 | -1 | 6 | -1 | -1 | -1 | 5 | 7 | 8 | 5 | -1 | -1 | 8 | -1 | 7 | -1 | -1 |
4. RETR_TREE
它检索所有的轮廓并创建一个完整的家族层次结构列表。它甚至告诉,谁是爷爷,父亲,儿子,孙子,甚至更多。
例子如下:
轮廓编号 | Next | Previous | First_Child, | Parent |
---|
0 | 7 | -1 | 1 | -1 | 1 | -1 | -1 | 2 | 0 | 2 | -1 | -1 | 3 | 1 | 3 | -1 | -1 | 4 | 2 | 4 | -1 | -1 | 5 | 3 | 5 | 6 | -1 | -1 | 4 | 6 | -1 | 5 | -1 | 4 | 7 | 8 | 0 | -1 | -1 | 8 | -1 | 7 | -1 | -1 |
|