概述
文章目录
- 目标
- 原理
- 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 <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; //
} //
程序说明
- 从默认或提供的捕获设备捕获视频流。
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学习笔记-Canny()边缘检测函数怎么用目标原理源码程序说明的全部内容,希望文章能够帮你解决OpenCV学习笔记-Canny()边缘检测函数怎么用目标原理源码程序说明所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复