opencv学习笔记—— findContours函数参数详解(检测出物体的轮廓)

8人阅读 评论(0) 收藏 举报
分类:

Opencv中通过使用findContours函数,简单几个的步骤就可以检测出物体的轮廓,很方便。这些准备继续探讨一下

findContours方法中各参数的含义及用法,比如要求只检测最外层轮廓该怎么办?contours里边的数据结构是怎样

的?hierarchy到底是什么鬼?Point()有什么用?

先从findContours函数原型看起:

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

第一个参数:image,单通道图像矩阵,可以是灰度图,但更常用的是二值图像,一般是经过Canny、拉普拉斯等边

                 缘检测算子处理过的二值图像;

第二个参数:contours,定义为“vector

#include "core/core.hpp"    
#include "highgui/highgui.hpp"    
#include "imgproc/imgproc.hpp"    
#include "iostream"  

using namespace std;   
using namespace cv;    

int main(int argc,char *argv[])    
{  
    Mat imageSource=imread(argv[1],0);  
    imshow("Source Image",imageSource);  
    Mat image;  
    GaussianBlur(imageSource,image,Size(3,3),0);  
    Canny(image,image,100,250);  
    vector<vector<Point>> contours;  
    vector<Vec4i> hierarchy;  
    findContours(image,contours,hierarchy,RETR_TREE,CHAIN_APPROX_SIMPLE,Point());  
    Mat imageContours=Mat::zeros(image.size(),CV_8UC1);  
    Mat Contours=Mat::zeros(image.size(),CV_8UC1);  //绘制  
    for(int i=0;i<contours.size();i++)  
    {  
        //contours[i]代表的是第i个轮廓,contours[i].size()代表的是第i个轮廓上所有的像素点数  
        for(int j=0;j<contours[i].size();j++)   
        {  
            //绘制出contours向量内所有的像素点  
            Point P=Point(contours[i][j].x,contours[i][j].y);  
            Contours.at<uchar>(P)=255;  
        }  

        //输出hierarchy向量内容  
        char ch[256];  
        sprintf(ch,"%d",i);  
        string str=ch;  
        cout<<"向量hierarchy的第" <<str<<" 个元素内容为:"<<endl<<hierarchy[i]<<endl<<endl;  

        //绘制轮廓  
        drawContours(imageContours,contours,i,Scalar(255),1,8,hierarchy);  
    }  
    imshow("Contours Image",imageContours); //轮廓  
    imshow("Point of Contours",Contours);   //向量contours内保存的所有轮廓点集  
    waitKey(0);  
    return 0;  
}  

参考文章https://blog.csdn.net/dcrmg/article/details/51987348

查看评论

OpenCV中findContours轮廓提取一个边缘只对应的一个轮廓

OpenCV中findContours轮廓提取一个边缘只对应的一个轮廓众所周知,图像查找轮廓可以用findContours函数解决,但是不知道大家发现一个问题没有,有时候输入图像,得到的结果会出现图像...
  • liumangmao1314
  • liumangmao1314
  • 2017-03-31 10:48:33
  • 3363

OPENCV轮廓提取findContours和drawContours

关于opencv中的轮廓提取函数findcontours()和轮廓绘制函数drawContours()中参数的说明和实验结果。...
  • maomao1011120756
  • maomao1011120756
  • 2015-11-12 10:16:29
  • 32010

findContours函数参数详解

注: 这篇文章用的OpenCV版本是2.4.10, 3以上的OpenCV版本相关函数可能有改动Opencv中通过使用findContours函数,简单几个的步骤就可以检测出物体的轮廓,很方便。这些准备...
  • dcrmg
  • dcrmg
  • 2016-08-19 21:54:17
  • 30484

Opencv findContours轮廓检测返回轮廓数过多时程序崩溃问题解决

在做测试的时候,轮廓数比较少时(应该是少于170左右),程序运行正常,能够成功return 1。当检测下面这幅图时,检测到的轮廓数为232,程序运行崩溃,提示:有未经处理的异常:将一个无效参数传递给了...
  • penge666
  • penge666
  • 2017-10-30 13:03:35
  • 511

OpenCV——findContours函数的使用(基于Mat轮廓处理基础)

本文所有代码参考OpenCV 300 目录 1.提取轮廓 2.绘制轮廓 3.获取轮廓最小外接矩形 4.获取轮廓最小外接圆 5.填充RotatedRect 1.提取轮廓...
  • u012566751
  • u012566751
  • 2017-08-30 16:53:55
  • 783

findContours 函数 hierarchy轮廓的层级关系终于弄懂了

本来就是云里雾里的,最近在写那个二维码的识别程序彻底把我弄崩溃了,决定好好弄懂轮廓的层级关系,前天一吧友推荐了一个相关资料,今天上午看了好一会,终于通过这个资料弄懂了。资料在这里: http://do...
  • guanyonglai
  • guanyonglai
  • 2017-03-03 15:01:53
  • 4370

Opencv::findContours函数参数说明及相关函数

findContours 寻找连通量函数
  • l740450789
  • l740450789
  • 2015-08-17 19:08:54
  • 1699

python-opencv2利用cv2.findContours()函数来查找检测物体的轮廓

转自 http://blog.csdn.net/sunny2038/article/details/12889059相比C++而言,Python适合做原型。本系列的文章介绍如何在python中用Ope...
  • hjxu2016
  • hjxu2016
  • 2017-09-04 09:40:42
  • 4203

【OpenCV3】图像轮廓查找与绘制——cv::findContours()与cv::drawContours()详解

查找图像的轮廓在图像处理及应用中扮演着重要的角色。那么什么是轮廓(contour)?《Learning OpenCV 3》中给出的定义是这样的——轮廓即是以某种方式表示图像中的曲线的点的列表。这种表示...
  • guduruyu
  • guduruyu
  • 2017-04-05 08:56:26
  • 10589

OpenCV3.0 Examples学习笔记(1)-contours2.cpp-通过findContours 函数实现轮廓提取

简介 这个系列的目的是通过对OpenCV示例,进一步了解OpenCV函数的使用,不涉及具体原理。 示例代码地址:http://docs.opencv.org/3.0.0/examples.html(安...
  • u012566751
  • u012566751
  • 2017-01-04 12:53:41
  • 4489
    个人资料
    持之以恒
    等级:
    访问量: 2万+
    积分: 1513
    排名: 3万+
    最新评论