首先介绍下这个函数:
findContours函数,这个函数的原型为:
void findContours(InputOutputArray image, OutputArrayOfArrays contours, OutputArray hierar-
chy, int mode, int method, Point offset=Point())
参数说明:
第一个参数:输入图像image必须为一个2值单通道图像。
第二个参数:contours参数为检测的轮廓数组,每一个轮廓用一个point类型的vector表示。
第三个参数:hiararchy参数和轮廓个数相同,每个轮廓contours[ i ]对应4个hierarchy元素hierarchy[ i ][ 0 ] ~hierarchy[ i ][ 3 ],分别表示后一个轮廓、前一个轮廓、父轮廓、内嵌轮廓的索引编号,如果没有对应项,该值设置为负数。
第四个参数:mode表示轮廓的检索模式。有以下几种模式:
1.CV_RETR_EXTERNAL表示只检测外轮廓
2.CV_RETR_LIST检测的轮廓不建立等级关系
3.CV_RETR_CCOMP建立两个等级的轮廓,上面的一层为外边界,里面的一层为内孔的边界信息。如果内孔内还有一个连通物体,这个物体的边界也在顶层。(简单的说就是检测双层轮廓)
4.CV_RETR_TREE建立一个等级树结构的轮廓。具体参考contours.c这个demo
第五个参数:method为轮廓的近似办法,主要有以下几种:
1.CV_CHAIN_APPROX_NONE存储所有的轮廓点,相邻的两个点的像素位置差不超过1,即max(abs(x1-x2),abs(y2-y1))==1
2.CV_CHAIN_APPROX_SIMPLE压缩水平方向,垂直方向,对角线方向的元素,只保留该方向的终点坐标,例如一个矩形轮廓只需4个点来保存轮廓信息
3.CV_CHAIN_APPROX_TC89_L1,CV_CHAIN_A

本文主要探讨了OpenCV中findContours函数在使用过程中可能遇到的参数类型不匹配和配置、内存调用问题。错误包括:输入图像必须为2值单通道图像,参数类型混淆,配置属性如MFC使用方式和运行库选择,以及内存管理中的动态内存分配问题。解决方案包括正确设置参数类型,调整编译器配置,以及初始化vector避免内存冲突。
最低0.47元/天 解锁文章
1064

被折叠的 条评论
为什么被折叠?



