1: image, cnts, hierarchy = cv2.findContours(a,b,c)//寻找图形中的轮廓
传入的参数:a:传入的图像(二值化图像)b:轮廓的检索模式,一般是检测外轮廓cv2.RETR_EXTERNALc:轮廓的近似方法有两种:(近似都是用近似矩形的方法,c不同的取值只是存储近似矩形的方法不同)①CV_CHAIN_APPROX_SIMPLE:一般是保留轮廓的终点坐标:近似矩形的左上角顶点坐标以及宽和高(x,y,w,h):②CV_CHAIN_APPROX_NONE:存储所有的轮廓点,相邻的两个点的像素位置差不超过1
函数返回值:image:处理过的图像(就是原本的图像,findcontous函数不改变你传入的图像)cnts:轮廓的点集列表,下文细说hierarchy:轮廓的层次结构,下文细说

cnts解析:
cnts代表的是找到的轮廓的点集的集合,它是一个numpy中的列表结构。你也可以把它理解为一个存储着图像中每个轮廓的数组,就像这样:

a = np.size(cnts) //a就是图像中所有轮廓的数量。cnts[i] //表示拿出图象中第i个轮廓。至于一个图像中那么多轮廓的索引如何规定,那是计算机的事情

只不过这个数组的每个位置存储的是图片中的一小部分图像(因为画一个轮廓只是画了整个图片的一部分,上文提到,画轮廓是以近似矩形的方式画的,然后cnts“数组”中的每个位置存储的就是这样一个被矩形围起来的图像的坐标)。如:

(注意,findContours只是找轮廓,不是画轮廓,画轮廓是drawContours函数,只不过draw函数是以find函数为基础进行画的)
这个图片被画出了10个轮廓,那么cnts的存储情况就是这样:

由图可见,cnts存储了10个“元素”,每个“元素”都是一个轮廓包围的图像的坐标。

hierarchy解析(重要性不如cnts)
hierarchy存储的是轮廓之间的层级关系,hierarchy是一个N*M大小的矩阵,N就是轮廓数量,M固定等于4。如:

[[[ 1 -1 -1 -1] #轮廓0[ 4 0 2 -1] #轮廓1[-1 -1 3 1] #轮廓2[-1 -1 -1 2] #轮廓3[-1 1 -1 -1]]] #轮廓4

由这段数据可知,这是五个轮廓,每个轮廓都有一个属于自己的层级关系,可以表示为[a,b,c,d]:
a:表示同级轮廓的下个轮廓的编号,如果没用下一个,a=-1

b:表示同级轮廓的上个轮廓的编号,如果没有上一个,b=-1

c:表示该轮廓包含的下一级轮廓的第一个的编号,如果没有,c = -1

d: 表示该轮廓的上一级轮廓的编号,如果没有,d = -1

每个轮廓的编号是计算机分配的(现在个人是这么理解的),分配好之后就可以得出每个轮廓对应的层次矩阵

轮廓0,它的同级下一个的编号为1,第一个参数为1; 因为这一级别的第一个,第二个参数-1;因为不包含子轮廓,所以第三个参数-1;因为处于第一级,其不属于任何别的级别,所以第四个参数为-1

轮廓1,它的同级下一个的编号为4,第一个参数为4; 因为这一级别的上一个的编号为0,第二个参数0;因为包含子轮廓,且子轮廓的第一个编号(当然只包含一个,多个也是同样的道理)为2,所以第三个参数2;因为处于第一级,其不属于任何别的级别,所以第四个参数为-1…之后以此类推

若有错误,欢迎指正

findContours函数详细解析相关推荐

  1. c语言的point函数,C语言中friend友元函数详细解析

    C语言中friend友元函数详细解析 友元函数是可以直接访问类的私有成员的非成员函数.它是定义在类外的普通函数,它不属于任何类,但需要在类的定义中加以声明,声明时只需在友元的名称前加上关键字frien ...

  2. c r语言中rank函数,R语言rank函数详细解析

    R语言rank函数详细解析 发布于 2016-01-04 16:26:04 | 557 次阅读 | 评论: 0 | 来源: PHPERZ R 数据统计分析语言R是用于统计分析.绘图的语言和操作环境.R ...

  3. CreateFile 函数详细解析

    前言:     在Windows编程中CreateFile函数是用得非常多的,由于它的参数比较多比较复杂,在使用的时候容易出现问题,在学习了MSDN的官方文档后打算将其原文翻译出来,以供参考,如有错误 ...

  4. python lambda函数详细解析(据说面试90%的人经常遇到)

    1 作用:通常是用来在python中创建匿名函数的 2 格式: lambda 参数[,参数] : 表达式 3 注意: 这里有我自己整理了一套最新的python系统学习教程,包括从基础的python脚本 ...

  5. Php 魔术函数性能,php常用的魔术函数详细解析

    1.__construct() 实例化对象时被调用, 当__construct和以类名为函数名的函数同时存在时,__construct将被调用,另一个不被调用. 2.__destruct() 当删除一 ...

  6. r语言rank降序_R语言rank函数详细解析

    1.rank函数是什么 rank相关文档[1]可以译为"返回原数组(?)中各个元素排序(?)后的秩次(?)",表面上看确实可以得到次序,但对数组.排序.秩次交待不清. 2.rank ...

  7. Python关于strftime函数详细解析 附实战代码

    目录 前言 1. strftime函数 2. 实战 前言 项目中的python web中,时间都用到了这个函数 深挖了一下基本的知识点以及实战中的书写 主要参考的知识点有: Python time s ...

  8. AcceptEx()函数详细解析

    服务器要做的最普通的事情之一就是接受来自客户端的连接请求.在套接字上使用重叠I/O接受连接的惟一API就是AcceptEx()函数[注一].有趣的是,通常的同步接受函数accept()的返回值是一个新 ...

  9. DeviceIoControl 函数详细解析

    前言: 最近需要对Windows中的设备进行编程操作,其中涉及到非常重要的函数DeviceIoControl,在使用的时候也比较的复杂,国内这一块中文资料比较少,在学习之余顺便将其翻译出来,以供参考, ...

最新文章

  1. zoj 3762(求三角形的最大高)
  2. 趣学python3(7)-循环语句(1)
  3. php中请写出定义变量的两种方法,php定义变量几种
  4. 智能用户增长神器QuickAudience开启公共云公测,助力企业业务增长
  5. 数据仓库介绍与实时数仓案例
  6. python3.8.2中文手册chm_3.2.2中文语法考察
  7. linux中存放着内核和引导程序的是,Linux操作系统 考试题库
  8. signature=e5535ff98b93aa63c455611822dc57c2,高校新生预激综合征6例报告
  9. LinkedList常用方法笔记
  10. ap音频测试仪软件,美国进口音频分析仪/AP音频测试仪/电声测试仪
  11. 关于MAC的pkg和mpkg的分别
  12. 三、Allan方差分析
  13. Thinkpad E430c 无线开关
  14. python用逗号隔开输出_c语言提取逗号隔开的 python输出用逗号隔开的数字
  15. c语言打开文件报错 13,求帮忙看一段打开文件的代码~~真心无力了
  16. ubuntu 下的pdfcrop功能不(pdf剪切)
  17. 黑平台出金路上连环套客服爱答不理 投诉多了换域名换皮接着干
  18. MySql delete多表关联删除的使用方法
  19. 学生表、班级表、成绩表
  20. 新式类和旧式(经典)类

热门文章

  1. 阿里云添加管理员用户进行协作
  2. BS和CS架构,软件开发的瀑布模型,快速原型模型、螺旋模型、敏捷开发、软件测试分类,测试的分类和理解
  3. 【论文笔记】SIFA——基于GAN的双向跨模态无监督域适应框架
  4. 【jquery】jquery-icheck radio的点击事件、change事件、获取当前选中的值
  5. 第三方App接入微信登录 解读
  6. 26岁想转行做程序员是否可行?
  7. 电脑桌面显示两个计算机,电脑如何用两个显示器_怎么一台主机两个显示器-win7之家...
  8. STM32L0 内部EEPROM写读
  9. Backtrack5 搭建Nessus
  10. 第一次.......