欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

opencv学习笔记十四:canny边缘检测

程序员文章站 2022-03-29 22:47:35
...

canny边缘检测步骤:

1、高斯模糊,去除噪声;

2、灰度转换;

3、计算题度;

4、非最大信号抑制;计算出来的梯度在各方向只保留梯度最大的,得到较细的边缘;

5、高低阈值连接:大于高阈值的保留,小于低阈值的舍弃,对于在高低阈值中间的,当其四领域或八领域内有高阈值的像素时,就将其连接,没有就舍弃。

#include<opencv2/opencv.hpp>
using namespace cv;

Mat src,gray_img, blur_img,canny_img,dst;
int value = 30;
void CallBack(int, void*);
int main(int arc, char** argv)
{   
	src = imread("1.jpg");
	namedWindow("input",CV_WINDOW_AUTOSIZE);
	imshow("input", src);
	cvtColor(src, gray_img, CV_BGR2GRAY);

	namedWindow("output", CV_WINDOW_AUTOSIZE);
	createTrackbar("ThresholdValue", "output", &value, 255, CallBack);
	CallBack(0, 0);

	waitKey(0);
	return 0;
}
void CallBack(int, void*) {
	GaussianBlur(gray_img, blur_img, Size(3, 3), 10, 10);
	int threshold1 = value;
	int threshold2 = 2*value;	
	Canny(blur_img, canny_img, threshold1, threshold2, 3);
	//dst.create(src.size(), src.type());
	//src.copyTo(dst, canny_img);
	imshow("output", canny_img);
}

其中src.copyTo(dst, canny_img)是将原图像src中canny_img对应的非零部分复制到dst中。

运行结果如下:

opencv学习笔记十四:canny边缘检测

相关标签: canny边缘检测