我是靠谱客的博主 狂野仙人掌,这篇文章主要介绍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()函数讲解

复制代码
1
2
3
4
5
6
7
void Canny( InputArray image, OutputArray edges, double threshold1, double threshold2, int apertureSize = 3, bool L2gradient = false);

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

源码

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
#include <opencv2opencv.hpp> #include <iostream> #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; // } //

程序说明

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

最后

以上就是狂野仙人掌最近收集整理的关于OpenCV学习笔记-Canny()边缘检测函数怎么用目标原理源码程序说明的全部内容,更多相关OpenCV学习笔记-Canny()边缘检测函数怎么用目标原理源码程序说明内容请搜索靠谱客的其他文章。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(80)

评论列表共有 0 条评论

立即
投稿
返回
顶部