OpenCV寻找轮廓findContours()和绘制轮廓drawContours()

1.findContours()
findContours用来寻找图像的轮廓,在OpenCV中有两种定义形式

  • 第一种定义形式

void cv::findContours   (   InputOutputArray    image,
                            OutputArrayOfArrays     contours,
                            OutputArray     hierarchy,
                            int     mode,
                            int     method,
                            Point   offset = Point() 
                        )   
参数说明:
InputOutputArray    image:输入图像,必须为8位单通道图像,图像中的非零像素被视为1,0像素保留其像素值,故加载后图像将自动转换为二值图像。可以使用cv::compare,cv::inRange,cv::threshold,cv::adaptive Threshold,cv::Canny等函数来创建二值图像,如果第四个参数为RETR_CCOMP或RETR_FLOODFILE,输入图像可以是32位整形图像CV_32SC1
OutputArrayOfArrays contours:检测到的轮廓,每个轮廓以点向量的形式进行存储,定义为vector> contours,向量内每个元素保存了一组由连续点构成的向量,每一组Point就是一个轮廓
OutoutArray hierarchy:关于输出图像的拓扑信息,hierarchy也是一个向量,长度和contours相等,每个元素和contours的元素对应,定义为vector hierarchy,其中Vec4i的定义为:typedef Vec Vec4i,例如第i个轮廓,hierarchy[i][0]和hierarchy[i][1]表示后一个轮廓的序号和前一个轮廓的序号,同一层关系;hierarchy[i][2]和hierarchy[i][3]表示子轮廓的序号和父轮廓的序号,不同层的关系。如果没有对应的轮廓,对应值被设为-1,hierarchy[i][-1]
int mode:轮廓检索模式,有如下几种:
         RETR_EXTERNAL:表示只检测最外层轮廓,对所有最外层轮廓设置hierarchy[i][2]=hierarchy[i][3]=-1
         RETR_LIST:提取所有轮廓,并放置在list中,检测到的轮廓不建立等级关系
         RETR_CCOMP:提取所有轮廓,并将轮廓组织成双层结构,顶层为连通域的外围边界,次层为内层边界
         RETR_TREE:提取所有轮廓并重新建立树状轮廓结构
int method:轮廓近似方法,有如下几种:
          CHAIN_APPROX_NONE:取每个轮廓的每个像素,相邻的两个像素位置差不超过1
          CHAIN_APPROX_SIMPLE:压缩水平方向,垂直方向,对角线方向的元素,保留该方向的重点坐标,如:一个矩形轮廓只需四个点来保存轮廓信息
          CHAIN_APPROX_TC89_L1和CHAIN_APPROX_TC89_KCOS:使用Teh-Chinl链逼近算法中的一种
Point   offset = Point() :轮廓点可选偏移量,有默认值Point(),对ROI图像中找出的轮廓并要在整个图像中进行时使用
  • 第二种定义形式
void findContours   (   InputOutputArray    image,
                        OutputArrayOfArrays     contours,
                        int     mode,
                        int     method,
                        Point   offset = Point() 
                        )   

2.drawContours()
drawContours()用于绘制findContours找到的图像轮廓

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() 
                      )
参数说明:
InputOutputArray image:输入图像
InputArrayOfArrays contours:使用findContours检测到的轮廓数据,每个轮廓以点向量的形式存储,vector> contours
int contourIdx:绘制轮廓的指示变量,如果为负值则绘制所有输入轮廓 
const Scalar& color:轮廓颜色
int thickness=1:绘制轮廓所用线条粗细度,如果值为负值,则在轮廓内部绘制
int lineType=8:线条类型,有默认值LINE_8
InputArray hierarchy=noArray():可选层次结构信息
int maxLevel=INT_MAX:用于绘制轮廓的最大等级
Point offset=Point():选轮廓便宜参数,用制定偏移量offset=(dx, dy)给出绘制轮廓的偏移量

你可能感兴趣的:(OpenCV)