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

OpenCV CUDA模块图像处理------创建CUDA加速的Canny边缘检测器对象createCannyEdgeDetector()

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

算法描述

该函数用于创建一个 CUDA 加速的 Canny 边缘检测器对象(CannyEdgeDetector),可以在 GPU 上高效执行 Canny 边缘检测算法。
它返回的是一个智能指针 Ptr,可以通过这个指针调用 .detect() 方法来对图像进行边缘检测。
Canny 是一种经典的多阶段边缘检测算法,包含以下几个步骤:

  • 高斯滤波去噪(用户需自行预处理)
  • 计算图像梯度幅值和方向
  • 非极大值抑制(Non-Maximum Suppression)
  • 滞后阈值处理(Hysteresis Thresholding)

OpenCV 的 cv::cuda::CannyEdgeDetector 类在 GPU 上实现了上述流程,适用于需要实时性或大规模图像处理的场景。

函数原型

Ptr<CannyEdgeDetector> cv::cuda::createCannyEdgeDetector 	
(double  	low_thresh,double  	high_thresh,int  	apperture_size = 3,bool  	L2gradient = false 
) 		

参数

  • low_thresh 滞后阈值处理(hysteresis procedure)中的第一个阈值(低阈值)。用于边缘连接,低于此值的边缘点通常会被抑制。
  • high_thresh 滞后阈值处理中的第二个阈值(高阈值)。高于此值的像素被认为是强边缘点(strong edges),会被保留。
  • aperture_size Sobel 算子使用的孔径大小(即卷积核的尺寸)。用于计算图像梯度。常用的值为 3、5 或 7。
  • L2gradient 一个标志,表示是否使用更精确的 L2 范数来计算图像梯度幅值:
    L 2 n o r m = ( d I / d x ) 2 + ( d I / d y ) 2 L_2 norm =\sqrt{(dI/dx)^2 + (dI/dy)^2} L2norm=(dI/dx)2+(dI/dy)2 当 L2gradient = true 时使用该方式;否则使用更快但精度稍低的 L1 范数:
    L 1 n o r m = ∣ d I / d x ∣ + ∣ d I / d y ∣ L_1 norm=|dI/dx|+|dI/dy| L1norm=dI/dx+dI/dy

代码示例

#include <opencv2/cudaimgproc.hpp>
#include <opencv2/opencv.hpp>int main()
{// Step 1: 读取图像并转换为灰度图cv::Mat h_img = cv::imread( "/media/dingxin/data/study/OpenCV/sources/images/stich1.png", cv::IMREAD_GRAYSCALE );if ( h_img.empty() ){std::cerr << "Failed to load image!" << std::endl;return -1;}// Step 2: 图像上传到 GPUcv::cuda::GpuMat d_img, d_edges;d_img.upload( h_img );// Step 3: 创建 Canny 边缘检测器(GPU 版)double low_thresh                            = 50;double high_thresh                           = 150;cv::Ptr< cv::cuda::CannyEdgeDetector > canny = cv::cuda::createCannyEdgeDetector( low_thresh, high_thresh );// Step 4: 执行边缘检测canny->detect( d_img, d_edges );// Step 5: 下载结果并显示cv::Mat h_edges;d_edges.download( h_edges );cv::imshow( "Original Image", h_img );cv::imshow( "Edges", h_edges );cv::waitKey( 0 );return 0;
}

运行结果

在这里插入图片描述

http://www.xdnf.cn/news/870103.html

相关文章:

  • 使用 useSearchParams 的一个没有触发控制台报错的错误用法
  • STL 库基础概念与示例
  • 洛谷每日1题-------Day39__P1697 [USACO18JAN] Lifeguards B
  • Vue 生命周期全解析:从创建到销毁的完整旅程
  • Redisson - 实现延迟队列
  • 通过ca证书的方式设置允许远程访问Docker服务
  • 吴恩达机器学习讲义概述
  • 在虚拟宇宙中低语——进程间通信,Linux命名管道的前世今生
  • 哈希表入门:用 C 语言实现简单哈希表(开放寻址法解决冲突)
  • 9.RV1126-OPENCV 视频的膨胀和腐蚀
  • 基于windows系统的netcore架构与SqlServer数据库,实现双机热备。
  • 基于javaweb的SpringBoot公司日常考勤系统设计与实现(源码+文档+部署讲解)
  • 新手小白深入 BCI:实践与进阶(下)
  • 函数调用(Function Calling)
  • 子网划分例题
  • 【Git 合并冲突解决记录:从 “refusing to merge unrelated histories“ 到批量冲突处理】
  • 《高等数学》(同济大学·第7版)第一章第七节无穷小的比较
  • leetcode题解236:二叉树的最近公共祖先
  • 多层感知器MLP实现非线性分类(原理)
  • UDP包大小与丢包率的关系:原理分析与优化实践
  • 语法--06-- 简单句五大形式、系动词
  • Qwen2.5-VL - Vision Transformer(ViT)的patch 处理
  • 固定资产管理系统 ——仙盟创梦IDE
  • 华为云Flexus+DeepSeek征文|实战体验云服务器单机部署和CCE高可用的架构AI赋能
  • Android studio初体验
  • Android Studio 打包时遇到了签名报错问题:Invalid keystore format
  • Excel高级函数使用FILTER、UNIQUE、INDEX
  • 【产品业务设计】支付业务设计规范细节记录,含订单记录、支付业务记录、支付流水记录、退款业务记录
  • DeepSeek 赋能金融衍生品:定价与风险管理的智能革命
  • 3.3 HarmonyOS NEXT原子化服务开发:卡片设计、轻量部署与场景化编排实战