目录
1.调用findContours查找函数轮廓,里面的用的函数如findContours、drawContours、minAreaRect、contourArea都是在csdn上查的,这里不做赘述。
学习目标
- 轮廓识别
学习内容
- findContours函数
- 寻找灯条
- 找到中心位置
学习时间
- 2022年7月21日
学习产出
一、findContours函数学习笔记
轮廓提取使用findContours函数,其参数如下:
void cv::findContours ( InputArray
image,
OutputArrayOfArrays
contours,
OutputArray
hierarchy,
int mode,
int method,
Point
offset = Point()
)
void cv::findContours ( InputArray
image,
OutputArrayOfArrays
contours,
int mode,
int method,
Point
offset = Point()
)
先是对函数声明的理解和战队培训资料的解析:
image:输入图像。8-bit的单通道二值图像,非零的像素都会被当作1。
contours:检测到的轮廓。是一个向量,向量的每个元素都是一个轮廓。因此,这个向量的每个元素仍是一个向量。即vector<vector<Point> > contours
hierarchy:各个轮廓的继承关系。hierarchy也是一个向量,长度和contours相等,每个元素和contours的元素对应。hierarchy的每个元素是一个包含四个整型数的向量。即: vector<Vec4i> hierarchy; //Vec4i is a vector contains four number of int
int型的mode,定义轮廓的检索模式:
取值一:CV_RETR_EXTERNAL只检测最外围轮廓,包含在外围轮廓内的内围轮廓被忽略;
取值二:CV_RETR_LIST 检测所有的轮廓,包括内围、外围轮廓,但是检测到的轮廓不建立等级关系;
取值三:CV_RETR_CCOMP 检测所有的轮廓,但所有轮廓只建立两个等级关系,外围为顶层,若外围内的内围轮廓还包含了其他的轮廓信息,则内围内的所有轮廓均归属于顶层;
取值四:CV_RETR_TREE 检测所有轮廓,所有轮廓建立一个等级树结构。外层轮廓包含内层轮廓,内层轮廓还可以继续包含内嵌轮廓。
第五个参数:int型的method,定义轮廓的近似方法:
取值一:CV_CHAIN_APPROX_NONE 保存物体边界上所有连续的轮廓点到contours向量内
取值二:CV_CHAIN_APPROX_SIMPLE 仅保存轮廓的拐点信息,把所有轮廓拐点处的点保存入contours向量内,拐点与拐点之间直线段上的信息点不予保留
其中