资讯专栏INFORMATION COLUMN

opencv python 轮廓的层次结构

tracymac7 / 2233人阅读

摘要:最后,轮廓是轮廓的子节点,它们位于最后的层次结构级别。即对象的外部轮廓即其边界放置在层次结构中对象内部的孔的轮廓如果有的话放在层次结构中用或标记了轮廓的顺序和它们所属的层次结构它检索所有轮廓并创建完整的族层次结构列表。

Contours Hierarchy

1 层次结构

通常我们使用cv.findContours()函数来检测图像中的对象,有时对象位于不同的位置. 但在某些情况下,某些形状在其他形状内. 就像嵌套的数字一样. 在这种情况下,我们将外部一个称为父项,将内部项称为子项.这种关系的表示称为层次结构.


在这张图片中,从0-5编号, 2和2a表示最外侧盒子的外部和内部轮廓.
轮廓-0,1,2是外部或最外部的. 我们可以说,它们在层次结构-0中,或者只是它们处于相同的层次结构级别.
轮廓-2a可以被认为是轮廓-2的子节点(或者相反,轮廓-2是轮廓-2a的父节点),所以让它在层次结构-1中.
类似地,轮廓-3是轮廓-2的子节点,它进入下一层次。
最后,轮廓-4,5是轮廓-3a的子节点,它们位于最后的层次结构级别。

2 OpenCV中的层次结构表示

每个轮廓都有自己的信息,关于它是什么层次结构,谁是它的子,谁是它的父等.OpenCV将它表示为四个值的数组:[Next,Previous,First_Child,Parent]

Next:同一层级的下一个轮廓
在我们的图片中取出contour-0,Next = 1;
Contour-1,Next = 2;
Contour-2,同一级别没有下一个轮廓,Next = -1.

Previous:同一层级的前轮廓
Contour-1,Previous= 0;
Contour-0,同一级别没有上一个轮廓,Previous= -1

First_Child:其第一个子轮廓.
Contour-2,Previous= 2a;

Parent:其父轮廓的索引.
与First_Child相反, 对于轮廓-4和轮廓-5,父轮廓都是轮廓-3a,如果没有子项或父项,则该字段将被视为-1

3 轮廓检索模式

连接章节

1 RETR_LIST

只是检索所有轮廓,但不创建任何父子关系, 根据这条规则,父母和孩子是平等的,他们只是轮廓, 即它们都属于同一层次结构.

>>> hierarchy
array([[[ 1, -1, -1, -1],
        [ 2,  0, -1, -1],
        [ 3,  1, -1, -1],
        [ 4,  2, -1, -1],
        [ 5,  3, -1, -1],
        [ 6,  4, -1, -1],
        [ 7,  5, -1, -1],
        [-1,  6, -1, -1]]])
2 RETR_EXTERNAL

如果使用此标志,则仅返回最外的轮廓。 所有子轮廓都被遗忘. 我们可以说,根据这项规则,只有每个家庭中最年长的人才能得到照顾, 它并不关心其他家庭成员.

>>> hierarchy
array([[[ 1, -1, -1, -1],
        [ 2,  0, -1, -1],
        [-1,  1, -1, -1]]])
3 RETR_CCOMP

此标志检索所有轮廓并将它们排列为2级层次结构。 即对象的外部轮廓(即其边界)放置在层次结构-1中. 对象内部的孔的轮廓(如果有的话)放在层次结构-2中.

用1或2标记了轮廓的顺序和它们所属的层次结构

>>> hierarchy
array([[[ 3, -1,  1, -1],
        [ 2, -1, -1,  0],
        [-1,  1, -1,  0],
        [ 5,  0,  4, -1],
        [-1, -1, -1,  3],
        [ 7,  3,  6, -1],
        [-1, -1, -1,  5],
        [ 8,  5, -1, -1],
        [-1,  7, -1, -1]]])
4 RETR_TREE

它检索所有轮廓并创建完整的族层次结构列表。 它甚至告诉,谁是爷爷,父亲,儿子,孙子

>>> hierarchy
array([[[ 7, -1,  1, -1],
        [-1, -1,  2,  0],
        [-1, -1,  3,  1],
        [-1, -1,  4,  2],
        [-1, -1,  5,  3],
        [ 6, -1, -1,  4],
        [-1,  5, -1,  4],
        [ 8,  0, -1, -1],
        [-1,  7, -1, -1]]])

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/42022.html

相关文章

  • opencv python 图像轮廓/检测轮廓/绘制轮廓

    摘要:绘制所有轮廓,传递要绘制图像中的所有轮廓,,,,要绘制单个轮廓,比如第个轮廓,,,,但大多数情况下,绘制第个轮廓,以下方法将非常有用,,,,代码 Contours : Getting Started 轮廓 简单地解释为连接所有连续点(沿着边界)的曲线,具有相同的颜色或强度. 轮廓是形状分析和物体检测和识别的有用工具 NOTE 为获得更好的准确性,请使用二值图,在找到轮廓之前,应用阈...

    caikeal 评论0 收藏0
  • 记数独X--Android openCV识别数独并自动求解填充APP开发过程

    摘要:可以针对笔者常用的数独本文的实现都基于该,实现数独的识别求解并把答案自动填入。专家级别的平均秒完成求解包括图像数字提取,识别过程,完成全部操作。步骤四数独求解,生成答案,并生成需要填充的数字序列。 1 序   数独是源自18世纪瑞士的一种数学游戏。是一种运用纸、笔进行演算的逻辑游戏。玩家需要根据9×9盘面上的已知数字,推理出所有剩余空格的数字,并满足每一行、每一列、每一个粗线宫(3*3...

    yvonne 评论0 收藏0
  • 使用PythonOpenCV进行基本图像处理——提取红色圆圈轮廓并绘制

    摘要:使用,进行基本的图像处理提取红色圆圈轮廓并绘制效果图源码写这篇博客源于博友的提问,想提取图片中的红色圆圈坐标,并绘制封闭的轮廓。还是使用一系列图像处理,得到了比较理想的结果。 ...

    Gu_Yan 评论0 收藏0

发表评论

0条评论

tracymac7

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<