OpenCV学习笔记-Canny()边缘检测函数怎么用

文章目录

  • 目标
  • 原理
    • Canny()函数讲解
  • 源码
  • 程序说明

参考: https://docs.opencv.org/3.4.5/da/d5c/tutorial_canny_detector.html
若有表达不当或错误欢迎留言指正,互相交流学习,共同进步

目标

在本教程中,您将学习如何:

  • 使用OpenCV函数cv :: Canny实现Canny边缘检测器。

原理

参考官方文档:https://docs.opencv.org/3.4.5/da/d5c/tutorial_canny_detector.html

Canny()函数讲解

void Canny(	InputArray image, 
			OutputArray edges,
			double threshold1, 
			double threshold2,
			int apertureSize = 3, 
			bool L2gradient = false);

第一个参数:输入图像(八位的图像)
第二个参数:输出的边缘图像
第三个参数:下限阈值,如果像素梯度低于下限阈值,则将像素不被认为边缘
第四个参数:上限阈值,如果像素梯度高于上限阈值,则将像素被认为是边缘(建议上限是下限的2倍或者3倍)
第五个参数:为Sobel()运算提供内核大小,默认值为3
第六个参数:计算图像梯度幅值的标志,默认值为false

源码

#include  
#include 
#include "opencv2/imgproc.hpp"
#include "opencv2/imgcodecs.hpp"
#include "opencv2/highgui.hpp"
using namespace cv;
int main()
{																//
	VideoCapture capture(0);									//
	//【2】循环显示每一帧											//									
	while (1)													//
	{															//
		Mat image;  //定义一个Mat变量,用于存储每一帧的图像		//	
		capture >> image;  //读取当前帧							//
//================================================================
		Mat gray, detected_edges,dst;
		gray.create(gray.size(), gray.type());
		detected_edges.create(detected_edges.size(), detected_edges.type());
		dst.create(dst.size(), dst.type());
		int kernel_size = 3;
		int ratio = 3;
		double lowThreshold = 65;

		cvtColor(image, gray, CV_BGR2GRAY);
		blur(gray, detected_edges, Size(3, 3));
		Canny(detected_edges, detected_edges, lowThreshold, lowThreshold*ratio, kernel_size);
		dst = Scalar::all(0);
		image.copyTo(dst, detected_edges);
		imshow("out", dst);

//================================================================
																//
																//	
		waitKey(30);  //延时30ms								//
	}															//
	return 0;													//
}																//

程序说明

  • 从默认或提供的捕获设备捕获视频流。
int main()
{
	VideoCapture capture(0);
	//【2】循环显示每一帧
	while (1)													//
	{															//
		Mat image;  //定义一个Mat变量,用于存储每一帧的图像		//	
		capture >> image;  //读取当前帧							//
//================================================================
  • 定义灰度图像、输出的边缘图、输出图像
Mat gray, detected_edges,dst;
	gray.create(gray.size(), gray.type());
	detected_edges.create(detected_edges.size(), detected_edges.type());
	dst.create(dst.size(), dst.type());
  • 转换颜色空间
cvtColor(image, gray, CV_BGR2GRAY);
  • 滤波
blur(gray, detected_edges, Size(3, 3));
  • 边缘检测
Canny(detected_edges, detected_edges, lowThreshold, lowThreshold*ratio, kernel_size);
  • 输出图像
dst = Scalar::all(0);
		image.copyTo(dst, detected_edges);
		imshow("out", dst);

你可能感兴趣的:(OpenCV)