当前位置: 首页 > news >正文

OpenCV特征检测(2)边缘检测函数Canny()的使用

  • 操作系统:ubuntu22.04
  • OpenCV版本:OpenCV4.9
  • IDE:Visual Studio Code
  • 编程语言:C++11

算法描述

使用 Canny 算法 48在图像中查找边缘。
该函数使用 Canny 算法在输入图像中查找边缘,并在输出地图 edges 中标记它们。在 threshold1 和 threshold2 之间使用较小的值进行边缘链接。较大的值用于查找强烈的边缘的初始段。参见 http://en.wikipedia.org/wiki/Canny_edge_detector

cv::Canny() 是 OpenCV 库中用于边缘检测的一个非常流行的函数。它使用 Canny 边缘检测算法来找出图像中的边缘。

函数原型

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

参数

  • 参数image:8 位输入图像。
  • 参数edges:输出的边缘图;单通道 8 位图像,其大小与 image 相同。
  • 参数threshold1:滞后阈值程序的第一个阈值。
  • 参数threshold2:滞后阈值程序的第二个阈值。
  • 参数apertureSize:Sobel 操作符的孔径大小。
  • 参数L2gradient:一个标志,指示是否应使用更准确的 L2 范数 N O M = ( d I / d x ) 2 + ( d I / d y ) 2 NOM=\sqrt{(dI/dx)^2 + (dI/dy)^2} NOM=(dI/dx)2+(dI/dy)2 来计算图像梯度大小(L2gradient=true)如果为 false,则使用默认的 L1 范数 = ∣ d I / d x ∣ + ∣ d I / d y ∣ =|dI/dx|+|dI/dy| =dI/dx+dI/dy

函数原型2

void cv::Canny
(	InputArray 	dx,InputArray 	dy,OutputArray 	edges,double 	threshold1,double 	threshold2,bool 	L2gradient = false 
)		

参数2

  • 参数dx:输入图像的 16 位 X 方向导数(CV_16SC1 或 CV_16SC3 类型)。
  • 参数dy:输入图像的 16 位 Y 方向导数(与 dx 类型相同)。
  • 参数edges:输出的边缘图;单通道 8 位图像,其大小与 image 相同。
  • 参数threshold1:滞后阈值程序的第一个阈值。
  • 参数threshold2:滞后阈值程序的第二个阈值。
  • 参数L2gradient:一个标志,指示是否应使用更准确的 L2 范数 $nom=\sqrt{(dI/dx)^2 + (dI/dy)^2}
    来计算图像梯度大小(L2gradient=true),或者是否使用默认的 L1 范数 n o m = ∣ d I / d x ∣ + ∣ d I / d y ∣ nom=|dI/dx|+|dI/dy| nom=dI/dx+dI/dy
    即可(L2gradient=false)。

代码示例

#include <iostream>
#include <opencv2/opencv.hpp>int main()
{// 加载图像cv::Mat img = cv::imread( "/media/dingxin/data/study/OpenCV/sources/images/hawk.jpg", cv::IMREAD_GRAYSCALE );if ( img.empty() ){std::cout << "Error opening image" << std::endl;return -1;}// 使用 Canny 边缘检测算法cv::Mat edges;int threshold1 = 50; // 第一个阈值int threshold2 = 150; // 第二个阈值// 调用 Canny 函数cv::Canny(img, edges, threshold1, threshold2); // 使用 Canny 算法检测边缘// 显示原始图像和边缘图像cv::namedWindow("Original Image", cv::WINDOW_NORMAL);cv::imshow("Original Image", img);cv::namedWindow("Edges", cv::WINDOW_NORMAL);cv::imshow("Edges", edges);cv::waitKey(0);return 0;
}

运行结果

在这里插入图片描述

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • Spring在不同类型之间也能相互拷贝?
  • 【Verilog学习日常】—牛客网刷题—Verilog企业真题—VL77
  • Linux 生成 git ssh 公钥
  • Linux 内核的版本控制
  • linux-系统备份与恢复-系统恢复
  • Redis主要问题
  • C语言习题~day25
  • mac 怎么查看CPU核数
  • Arthas jvm(查看当前JVM的信息)
  • 2024年全新deepfacelive如何对应使用直播伴侣-腾讯会议等第三方软件
  • 毕业设计选题:基于springboot+vue+uniapp的驾校报名小程序
  • 图像锐化的算法总结
  • Linux 基础入门操作 第九章 进程间通信之管道
  • 【数据结构初阶】链式二叉树接口实现超详解
  • S3C2440中断
  • [NodeJS] 关于Buffer
  • 2017 前端面试准备 - 收藏集 - 掘金
  • C# 免费离线人脸识别 2.0 Demo
  • Electron入门介绍
  • EOS是什么
  • es6要点
  • JS创建对象模式及其对象原型链探究(一):Object模式
  • js如何打印object对象
  • Next.js之基础概念(二)
  • 记一次和乔布斯合作最难忘的经历
  • 扫描识别控件Dynamic Web TWAIN v12.2发布,改进SSL证书
  • 在Mac OS X上安装 Ruby运行环境
  • 正则表达式小结
  • No resource identifier found for attribute,RxJava之zip操作符
  • 国内开源镜像站点
  • ###C语言程序设计-----C语言学习(3)#
  • #我与Java虚拟机的故事#连载08:书读百遍其义自见
  • (C11) 泛型表达式
  • (C语言)fgets与fputs函数详解
  • (C语言)二分查找 超详细
  • (二十六)Java 数据结构
  • (转)Linux整合apache和tomcat构建Web服务器
  • ****** 二 ******、软设笔记【数据结构】-KMP算法、树、二叉树
  • .[backups@airmail.cc].faust勒索病毒的最新威胁:如何恢复您的数据?
  • .NET gRPC 和RESTful简单对比
  • .NET 中的轻量级线程安全
  • .net6解除文件上传限制。Multipart body length limit 16384 exceeded
  • .Net插件开发开源框架
  • .net反编译的九款神器
  • .NET基础篇——反射的奥妙
  • .Net开发笔记(二十)创建一个需要授权的第三方组件
  • .net快速开发框架源码分享
  • .NET设计模式(7):创建型模式专题总结(Creational Pattern)
  • @configuration注解_2w字长文给你讲透了配置类为什么要添加 @Configuration注解
  • @KafkaListener注解详解(一)| 常用参数详解
  • @private @protected @public
  • [4]CUDA中的向量计算与并行通信模式
  • [bzoj1038][ZJOI2008]瞭望塔
  • [C++]unordered系列关联式容器
  • [codevs 2822] 爱在心中 【tarjan 算法】