一般情况下我们称外部的形状为父,内部的形状为子。按照这种方式分类,一幅图像中的所有轮廓之间就建立父子关系。这样我们就可以确定一个轮廓与其他轮廓是怎样连接的,它是不是某个轮廓的子轮廓,或者是父轮廓。这种关系就成为组织结构。
在这幅图像中,我给这几个形状编号为0-5。2和2a分别代表最外边矩形的外轮廓内状语从句:轮廓。 在这里边轮廓0,1,2在外部或最外边。我们可以称他们为(组织结构)0级,简单来说就是他们属于同一级。 接下来轮廓2a上。我们把它当成轮廓2的子轮廓。它就成为(组织结构)第1级。同样轮廓3是轮廓2的子轮廓,成为(组织结构)第2级。3a是3的子轮廓,为第3级。最后轮廓4,5是轮廓3a的子轮廓,成为(组织结构)4级(最后一级)。按照这种方式给这些形状编号,我们可以说轮廓4是轮廓3a的子轮廓(当然轮廓5也是)
opencv中的层次结构
OpenCV使用一个包含四个元素的数组表示父子关系,【下一个,上一个,第一个孩子,父母】 下一个表示同一级组织结构中的下一个轮廓。轮廓2的在同一级没有Next时,Next = -1。而轮廓4的Next为5所以它的Next =5。Previous相同轮廓结构中的前一个轮廓。 与前一样轮廓1的上一个为轮廓0轮廓2的上一个为轮廓1。轮廓0没有上一个所以上一个=-1。First_Child示它的第一个子轮廓。 轮廓2的子轮廓为2a。它的First_Child为2a。轮廓3a呢它有两个子轮廓。但是我们只第一个子轮廓所以是轮廓4按照从上往下从左往右的序排序。父表示是它的父轮廓。 与FIRST_CHILD刚好相反。轮廓4和5的父轮廓是轮廓3a上。而轮廓图3a的父轮廓是3. 【如果没有父或子,就为-1】
轮廓
检索模式RETR_LIST从的度来看中应是简单的。它只是提取所有的轮廓而不去创建任何父子关系。换句就是“人人平等”它们属于同一级组织轮廓。 所以在种情况下组织结构数组的第三和第四个数是-1。但是很明显下一页和上一页有对应的值。 RETR_EXTERNAL如果你择种模式的只会回外的的轮廓,所有的子轮廓会忽略掉。
总结
(这一节是这一个系列的最后一个教学篇,接下来会是一系列的实战演练。下个系列还是每周不定期更细,谢谢大家的支持!)