轮廓提取--findContours()和drawContours()

一、函数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 :每个轮廓点的偏移量 ;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值