【目标】提取图像中的目标轮廓
【寻找轮廓】
findContours(InputOutputArray二值图, 点类型的contours, int mode, int method, Point offset=Point());
或
findContours(InputOutputArray二值图, 点类型的contours, OutputArray hierarchy, int mode, int method, Point offset=Point());
【注意】InputOutputArray类型的image都会被改变。此函数会改变输入的2值图像,所以一般先Mat src1=src.clone(),对src1处理。
contours——vector > contours; 轮廓边界点的集合。
hierarchy——vector hierarchy; 每个轮廓contours[i]对应4个hierarchy元素:hierarchy[i][0]~hierarchy[i][3],分别表示后一个轮廓、前一个轮廓、父轮廓、内嵌轮廓的索引编号。若没对应项,对应的hierarchy[i]值设为负。
mode——轮廓检索模式
轮廓检索模式 |
|
CV_RETR_EXTERNAL |
只检测最外层轮廓,对所有轮廓设置hierarchy[i][2]=hierarchy[i][3]=-1 |
CV_RETR_LIST |
检测所有轮廓,且放在list中,轮廓间无等级关系,即只有一层 |
CV_RETR_CCOMP |
检测所有轮廓,且组织为双层结构,即两层的 hierarchy。顶层为连通域外围边界、次层为内层边界 |
CV_RETR_TREE |
检测所有轮廓,并且重构嵌套轮廓的全部 hierarchy |
method——轮廓的近似方法