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().