一、函数findContours()

功能:在二值图像中寻找轮廓

结构:

void findContours(InputOutputArray image, OutputArrayOfArrays contours, OutputArray hierarchy, int mode, int method, Point offset=Point())


image :输入的 8-比特、单通道图像. 非零元素被当成 1, 0 象素值保留为 0 - 从而图像被看成二值的。为了从灰度图像中得到这样的二值图像,可以使用 cvThreshold, cvAdaptiveThreshold 或 cvCanny. 本函数改变输入图像内容;

contours :检测到的轮廓,每个轮廓都被保存为一系列点集  ;

hiararchy :包含了图片的拓扑结构,数量和轮廓数一样多,对于每一个轮廓都有对应的层级元素,由四个整数组成一个索引值,hierarchy[i][0] , hiearchy[i][1] 给出了同一级中下一个轮廓及前一个轮廓的索引值,hiearchy[i][2],hiearchy[i][3] 则表示第一个后代及父亲的索引值,一个负数的索引值意味着轮廓列表的末尾; 

mode : 轮廓检索的模式 

CV_RETR_EXTERNAL :只提取最外层的轮廓,对所有轮廓hierarchy[i][2]=hierarchy[i][3]=-1 ;

CV_RETR_LIST 提取所有轮廓,并且放置在 list 中,只有一层 ;

CV_RETR_CCOMP :提取所有轮廓,并且将其组织为两层的 hierarchy: 顶层为连通域的外围边界,次层为洞的内层边界 ;

CV_RETR_TREE :提取所有轮廓,并且重构嵌套轮廓的全部 hierarchy ;

method : 逼近方法 

CV_CHAIN_APPROX_NONE :将所有点由链码形式翻译(转化)为点序列形式 ;

CV_CHAIN_APPROX_SIMPLE :压缩水平、垂直和对角分割,即函数只保留末端的象素点;

CV_CHAIN_APPROX_TC89_L1,CV_CHAIN_APPROX_TC89_KCOS :应用 Teh-Chin 链逼近算法 ;


offset :每一个轮廓点的偏移量. 当轮廓是从图像 ROI 中提取出来的时候,使用偏移量有用,因为可以从整个图像上下文来对轮廓做分析。

二、drawContours()


功能:画轮廓或填充轮廓

结构:

void drawContours(InputOutputArray image, InputArrayOfArrays contours, int contourIdx, const Scalar& color, int thickness=1, int lineType=8, InputArray hierarchy=noArray(), int maxLevel=INT_MAX, Point offset=Point() )


image:目标图像 ;


contours :所有的轮廓 ;


contourIdx :指定哪一个轮廓,如果为负数,则表示画所有的轮廓 ;


color:轮廓的颜色 ;


thickness :线的粗细程度,如果为负数,则表示填充整个轮廓 ;


lineType :连通性 ;


hierarchy :如果你想画出图像的一部分轮廓,那么你就需要它 ;


maxLevel :用于画轮廓的最大层,如果为0,只是画出指定的轮廓,如果为1,画出第一层的所有轮廓,如果为2,画出第一和第二层的所有轮廓,依次类推,这个参数只有在有层次关系的时候被使用 ;


offset :每个轮廓点的偏移量 ;