OpenCV学习笔记(四)

一、Canny边缘检测

函数原型

void Canny(InputArray image, OutputArray edges, double threshold1, double threshold2, int apertureSize = 3, bool L2gradient = false)
  1. 第一个参数,InputArray类型的image,输入图像,Mat类型的对象,且为单通道8位图像
  2. 第二个参数,OutputArray类型的edges,输出的边缘图,需要和源图片一样的尺寸和类型
  3. 第三个参数,double类型的threshold1,第一个滞后性阈值
  4. 第四个参数,double类型的threshold2,第二个滞后阈值
  5. 第五个参数,int类型的apertureSize,表示应用Soble算子的孔径大小,默认值3
  6. 第六个参数,bool类型的L2gradient,一个计算图像梯度幅值的标识,默认false
    注意:阈值1好阈值2两者中较小的值用于边缘连接,而较大的值用来控制强边缘的初始段,推荐的高低阈值比在2:1到3:1之间。
    调用实例:
Mat src = imread("1.jpg");
Canny(src,src,3,9,3);
imshow("[效果图]",src)

示例程序

#include<opencv2/core/core.hpp>
#include<opencv2/highgui/highgui.hpp>
#include<opencv2/imgproc/imgproc.hpp>
using namespace cv;
int main()
{
	Mat src = imread("1.jpg");
	Mat src1 = src.clone();
	imshow("[原始图]", src);
	Mat dst, edge, gray;
	dst.create(src1.size(), src1.type());
	//灰度化
	cvtColor(src1, gray, COLOR_BGR2GRAY);
	//3*3内核降噪
	blur(gray, edge, Size(3,3));
	Canny(gray, edge, 3, 9, 3);
	dst = Scalar::all(0);
	//Canny算子输出的边缘图g_cannyDetectedEdges作为掩码,将原图g_srcImage拷贝到g_dstImage
	src1.copyTo(dst, edge);
	imshow("[效果图]", dst);
	 
	
	waitKey(0);
	return 0;
}

OpenCV学习笔记(四)