opencv3 8.1 查找并绘制轮廓

8.1.1

寻找轮廓 findContours

在二值图像中寻找轮廓

  • 参数1 Mat 源图像 应该是二值图像,可以用threshold,compare,inrange,adaptivethreshold,canny等将灰度图,彩色图转换成二值图,此函数会在寻找轮廓的同时修改图象的内容。

  • 参数2 outputarrayofarrays contours 检测到的轮廓,调用函数之后的运算结果储存在这里,用point类型的vector表示。

  • 参数3 outputarray hierarchy 可选的输出向量,包含图像的拓扑信息,作为轮廓数量的表示,包含了许多元素,每个轮廓contours[i]对应4个hierarchy元素 ([i][0]~[i][3]),分别表示后一个轮廓、前一个轮廓、父轮廓、内嵌轮廓的索引编号,如果没有对应项,对应的hierarchy[i]值设置成负值。

  • 参数4 int mode
    RETR_EXTERNAL 表示只检测最外层轮廓[i][2] [i][3]=-1;
    RETR_LIST 提取所有轮廓并且放在list中。轮廓不建立等级关系
    RETR_CCOMP 提取所有轮廓,并且将其组织成双层结构(顶层为连通域的外围边界,次层为孔的内层边界);
    RETR_TREE 提取所有轮廓,并重新建立网状的轮廓结构

  • 参数5 int method
    CHAIN_APPROX_NONE 获取每个轮廓的每个像素,相邻的两个点的像素位置差不超过1
    CHAIN_APPROX_SIMPLE 压缩水平方向,垂直方向,对角线方向的元素,只保留该方向的终点坐标,例如一个矩形只需4个点
    CHAIN_APPROX_TC89_L1,CHAIN_APPROX_TC89_KCOS 使用Teh_Chinl链逼近算法中的一个。

  • 参数6 Point offset 每个轮廓点可选的偏移量,有默认值Point()对ROI图像中找出的轮廓,并要在整个图像中进行分析时,这个参数有用。

绘制轮廓 drawContours()函数

  • 参数1 Mat 原图像
  • 参数2 contours point的vector类型
  • 参数3 int contourIdx轮廓绘制的指示变量,如果是负值绘制所有轮廓
  • 参数4 const Scalar& color表示颜色
  • 参数5 thickness 轮廓线条的粗细度,默认1 如果是负值
    绘制在轮廓内部。
  • 参数6 int lineType 线条类型 默认8 有8(8联通) 、4 (4联通)、LINE_AA(抗锯齿线型)
  • 参数7 InputArray hierarchy 可选层次结构,默认noArray()
  • 参数8 int maxLevel 表示用于绘制轮廓的最大等级,默认INT_MAX
  • 参数9 Point 类型的offset,可选的轮廓偏移量
    用指定的偏移量offset=(dx,dy)偏移需要绘制的轮廓,有默认值Point().
原文地址:https://www.cnblogs.com/koukouStar/p/14534997.html