您的位置:首页 > 运维架构

OpenCV - findContours函数使用

2015-12-01 17:21 225 查看

1、findContours

findContours在OpenCV的参考手册(opencv2refman.pdf)中的原型如下:



findContours有两个函数的原型,第一个输出带层次的contours,换句话说每一个contours都在一个单独的图像层上,这就给我们需要单独处理每一个contours带来了方便。不带层次的coutours也有自己的用处,也就是我们在不需要输出层次的contours的时候使用第二个重载的版本就好了。

参数解释:
InputOutputArray image, 这个参数不用过多解释,表示我们需要寻找contours的源图像,带入Mat型数据即可;

需要说明的是:

1、这里带入的图像必须是8bit单通道的图像;

2、这里的图像必须是二值的,当然也可以带入灰度图像,但是这时候这个函数就将图像中的像素为0的点作为0,像素不为0的点作为1。

特别提醒:

1、这个函数在提取轮廓的时候会改变源图像

2、当参数mode是CV_RETR_CCOMP 或者CV_RETR_FLOODFILL的时候输入的图像就可以是32bit的了。(CV_32SC1)

OutputArrayOfArrays contours, 注意这个地方的参数,这里的一般都会填入一个vector< vector<Point> >,也就是点集合

OutputArray hierarchy,这个参数填入的是图像的层次集合,这个是可选项,不填这个则不分层表示。填入这种数据类型std::vector<cv::Vec4i>;

int mode, 有以下几种模式:

1、CV_RETR_EXTERNAL 只检索图像的外边界

2、CV_RETR_LIST  检索所有contours但是不建立层次关系

3、CV_RETR_CCOMP 建立两个层次的轮廓,上面的一层为外面的边界,里面的一层为外边界内的边界

4、CV_RETR_TREE  建立等级树结构的轮廓

int method, 

1、CV_CHAIN_APPROX_NONE 存储所有的轮廓点,相邻的两个像素的位置差不超过1个像素

2、CV_CHAIN_APPROX_SIMPLE 压缩水平方向,垂直方向,对角线方向的元素,只保留该方向的终点坐标,例如一个矩形轮廓只需4个点来保存轮廓信息

3、CV_CHAIN_APPROX_TC89_L1,CV_CHAIN_APPROX_TC89_KCOS 使用teh-Chinl chain 近似算法

Point offset=Point() 表示代表轮廓点的偏移量
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: