OpenCV学习之路(三)——轮廓查找与多边形绘制

本文详细介绍了在OpenCV中如何利用findContours()和drawContours()函数进行轮廓查找与绘制,包括轮廓检索模式、轮廓近似方法以及如何使用多边形包围轮廓。还探讨了如何应用approxPolyDP()、boundingRect()、minAreaRect()、minEnclosingCircle()和fitEllipse()等函数来处理和表示轮廓。
摘要由CSDN通过智能技术生成

查找与绘制轮廓

一个轮廓一般对应一系列点,即一条曲线。在OpenCV中,可以用findContours()函数从二值图像查找轮廓。

  1. image:输入图像。8-bit的单通道二值图像,非零的像素都会被当作1。
  2. contours:检测到的轮廓。是一个向量,向量的每个元素都是一个轮廓。因此,这个向量的每个元素仍是一个向量。vector<vector > contours;
  3. hierarchy:各个轮廓的继承关系。hierarchy也是一个向量,长度和contours相等,每个元素和contours的元素对应。hierarchy的每个元素是一个包含四个整型数的向量。即:
    vector hierarchy; // Vec4i is a vector contains four number of int
    hierarchy[i][0],hierarchy[i][1],hierarchy[i][2],hierarchy[i][3],分别表示的是第i条轮廓(contours[i])的下一条,前一条,包含的第一条轮廓(第一条子轮廓)和包含他的轮廓(父轮廓)。
  4. mod: 检测轮廓的方法。有四种方法。
    method:表示一条轮廓的方法。
  5. offset:可选的偏移,就是简单的平移,特别是在做了ROI步骤之后有用

检测轮廓方法(mod):

  • CV_RETR_EXTERNAL:只检测外轮廓。忽略轮廓内部的洞。

  • CV_RETR_LIST:检测所有轮廓,但不建立继承(包含)关系。

  • CV_RETR_TREE:检测所有轮廓,并且建立所有的继承(包含)关系。用CV_RETR_EXTERNAL和CV_RETR_LIST方法hierarchy变量是没用的,因为前者没有包含关系,找到的都是外轮廓,后者仅仅是找到所有的轮廓但并不把包含关系区分。用TREE这种检测方法的时候我们的hierarchy这个参数才是有意义的。事实上,应用前两种方法的时候,我们就用findContours这个函数的第二种声明了。

  • CV_RETR_CCOMP:检测所有轮廓,但是仅仅建立两层包含关系。外轮廓放到顶层,外轮廓包含的第一层内轮廓放到底层,如果内轮廓还包含轮廓,那就把这些内轮廓放到顶层去。

表示一条轮廓的方法(method):

  • CV_CHAIN_APPROX_NONE:把轮廓上所有的点存储。

  • CV_CHAIN_APPROX_SIMPLE:只存储水平,垂直,对角直

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值