opencv教程(三)轮廓检测c++
边缘检测函数
1)c++:void findContours( InputOutputArray image, OutputArrayOfArrays contours,int mode, int method, Point offset = Point());
2)c++:void findContours( InputOutputArray image, OutputArrayOfArrays contours,OutputArray hierarchy,int mode, int method, Point offset = Point());
函数解析:image输入图像,8位单通道二值图像;contours为检测到的轮廓,每一个轮廓都在向量中;hierarchy为包含图像拓扑结构的信息;mode为可选获取轮廓的方法,常用的有CV_RETR_EXTERNAL,CV_RETR_LIST为检测所有轮廓的不包含继承关系,CV_RETR_TREE为检测所有轮廓的包含继承关系,CV_RETR_CCOMP为检测所有轮廓,但是仅仅建立两层包含关系;method为轮廓近似方法,参数设置为CV_CHAIN_APPROX_NONE表示把轮廓上所有的点存储,CV_CHAIN_APPROX_SIMPLE表示只存储水平,垂直及对角直线的起始点;offset为可选的偏移量。
Canny:边缘检测算子,边缘检测步骤:1.消除噪声2.计算梯度幅度与方向3.非极大值抑制4.用滞后阈值算法求解图像边缘
Canny函数
c++:void Canny( InputArray image, OutputArray edges,double threshold1, double threshold2,int apertureSize = 3, bool L2gradient = false );
函数解析:image为输入函数,单通道8bit;edges为输出图像,与输入同类型同尺寸;threshold1为第一滞后过程阈值;threshold2为第二滞后过程阈值;apertureSize为索贝尔操作的尺寸因子;L2gradient为标志位,表示是否使用L2范数来计算图像梯度大小。
代码示例
#include<opencv2/core/core.hpp>
#include<opencv2/imgproc/imgproc.hpp>
#include<opencv2/highgui/highgui.hpp>
#include<iostream>
using namespace cv;
using