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

OpenCV CUDA模块图像过滤------创建一个 Sobel 滤波器函数createSobelFilter()

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

算法描述

该函数用于创建一个 Sobel 滤波器,用于在 GPU 上进行边缘检测。它基于图像的梯度计算:

  • dx 表示对 x 方向求导的阶数(0 或 1)
  • dy 表示对 y 方向求导的阶数(0 或 1)
  • 支持核大小为 1、3、5、7 等奇数尺寸(默认为 3)

由于是 CUDA 实现,适合大规模图像的高性能处理。

参数

参数名类型描述
srcTypeint输入图像的数据类型。例如:CV_8UC1, CV_32FC4 等。
dstTypeint输出图像的数据类型。通常与输入相同或转换为更高精度(如 CV_32F)。
dxintx 方向导数的阶数。取值为 0 或 1,表示是否对 x 方向求导。
dyinty 方向导数的阶数。取值为 0 或 1,表示是否对 y 方向求导。
ksizeintSobel 核大小,必须是正奇数,默认为 3。支持 1、3、5、7。
scaledouble可选比例因子,默认为 1。可用于对结果进行缩放(如归一化)。
rowBorderModeint垂直方向(行)的边界填充方式。常用值有 BORDER_DEFAULT, BORDER_REPLICATE 等。
columnBorderModeint水平方向(列)的边界填充方式,默认为 -1,表示与 rowBorderMode 相同。

返回值

返回一个指向 cv::cuda::Filter 的智能指针 (Ptr),可以调用 .apply() 方法在 GPU 上执行 Sobel 边缘检测操作。

代码示例

以下是一个完整的使用 createSobelFilter 提取图像 x 和 y 方向梯度的示例代码:

#include <opencv2/opencv.hpp>
#include <opencv2/cudaimgproc.hpp>
#include <opencv2/cudafilters.hpp>int main() {// 读取图像并上传到 GPUcv::Mat h_input = cv::imread("/media/dingxin/data/study/OpenCV/sources/images/Lenna.png", cv::IMREAD_GRAYSCALE);if (h_input.empty()) {std::cerr << "无法加载图像!" << std::endl;return -1;}cv::cuda::GpuMat d_input, d_output_x, d_output_y;d_input.upload(h_input);// 创建 Sobel 滤波器(x方向)cv::Ptr<cv::cuda::Filter> sobelX = cv::cuda::createSobelFilter(d_input.type(),       // 输入类型CV_32F,               // 输出设为浮点型1,                    // x方向导数0,                    // y方向不导数3                     // 核大小);// 创建 Sobel 滤波器(y方向)cv::Ptr<cv::cuda::Filter> sobelY = cv::cuda::createSobelFilter(d_input.type(),CV_32F,0,1,3);// 应用滤波器sobelX->apply(d_input, d_output_x);sobelY->apply(d_input, d_output_y);// 下载结果并归一化显示cv::Mat h_output_x, h_output_y;d_output_x.download(h_output_x);d_output_y.download(h_output_y);cv::Mat out_x_u8, out_y_u8;cv::normalize(h_output_x, out_x_u8, 0, 255, cv::NORM_MINMAX, CV_8U);cv::normalize(h_output_y, out_y_u8, 0, 255, cv::NORM_MINMAX, CV_8U);cv::imshow("Sobel X", out_x_u8);cv::imshow("Sobel Y", out_y_u8);cv::waitKey(0);return 0;
}

运行结果

在这里插入图片描述

相关文章:

OpenCV CUDA模块图像过滤------创建一个 Sobel 滤波器函数createSobelFilter()

操作系统&#xff1a;ubuntu22.04 OpenCV版本&#xff1a;OpenCV4.9 IDE:Visual Studio Code 编程语言&#xff1a;C11 算法描述 该函数用于创建一个 Sobel 滤波器&#xff0c;用于在 GPU 上进行边缘检测。它基于图像的梯度计算&#xff1a; dx 表示对 x 方向求导的阶数&…...

[面试精选] 0053. 最大子数组和

文章目录 1. 题目链接2. 题目描述3. 题目示例4. 解题思路5. 题解代码6. 复杂度分析 1. 题目链接 53. 最大子数组和 - 力扣&#xff08;LeetCode&#xff09; 2. 题目描述 给你一个整数数组 nums &#xff0c;请你找出一个具有最大和的连续子数组&#xff08;子数组最少包含一…...

怎么判断一个Android APP使用了Cordova这个跨端框架

要判断一个 Android 应用是否使用了 Cordova 框架&#xff0c;可以通过以下方法逐步验证&#xff1a; 一、安装包结构分析 1. 解压 APK 将 .apk 文件重命名为 .zip 并解压&#xff0c;检查以下特征文件&#xff1a; • assets/www/ 目录&#xff1a; Cordova 的核心 Web 资源&…...

PDF 转 JPG 图片小工具:CodeBuddy 助力解决转换痛点

本文所使用的 CodeBuddy 免费下载链接&#xff1a;腾讯云代码助手 CodeBuddy - AI 时代的智能编程伙伴 前言 在数字化办公与内容创作的浪潮中&#xff0c;将 PDF 文件转换为 JPG 图片格式的需求日益频繁。无论是学术文献中的图表提取&#xff0c;还是宣传资料的视觉化呈现&am…...

VisionPro 与 C# 联合编程:相机连接实战指南

在工业视觉检测与自动化领域&#xff0c;康耐视&#xff08;Cognex&#xff09;的 VisionPro 是一款功能强大的视觉开发工具&#xff0c;而 C# 凭借其简洁性与高效性&#xff0c;成为许多开发者的首选编程语言。本文将详细介绍如何通过 C# 与 VisionPro 联合编程实现相机连接&a…...

鸿蒙OSUniApp 实现动态的 tab 切换效果#三方框架 #Uniapp

使用 UniApp 实现动态的 tab 切换效果 在移动应用开发中&#xff0c;tab 切换&#xff08;标签页&#xff09;是提升界面组织性和用户体验的常用交互方式。无论是资讯、商城、社区还是管理后台&#xff0c;tab 组件都能帮助用户高效切换不同内容区域。随着 HarmonyOS&#xff…...

Docker系列(三):深度剖析Dockerfile与图形化容器实战 --- 3种容器构建方法对比与性能调优

引言 在云原生技术驱动软件交付革新的当下&#xff0c;Dockerfile 作为容器化技术的核心载体&#xff0c;通过声明式语法将应用环境固化为可复现、可版本化的“蓝图”&#xff0c;彻底终结了“开发-生产”环境割裂的顽疾。本文以 Ubuntu 24.04 LTS 为实践基础&#xff0c;深度…...

论文阅读:Next-Generation Database Interfaces:A Survey of LLM-based Text-to-SQL

地址&#xff1a;Next-Generation Database Interfaces: A Survey of LLM-based Text-to-SQL 摘要 由于用户问题理解、数据库模式解析和 SQL 生成的复杂性&#xff0c;从用户自然语言问题生成准确 SQL&#xff08;Text-to-SQL&#xff09;仍是一项长期挑战。传统的 Text-to-SQ…...

OS面试篇

用户态和内核态 用户态和内核态的区别&#xff1f; 内核态和用户态是操作系统中的两种运行模式。它们的主要区别在于权限和可执行的操作&#xff1a; 内核态&#xff08;Kernel Mode&#xff09;&#xff1a;在内核态下&#xff0c;CPU可以执行所有的指令和访问所有的硬件资…...

FFMPEG-FLV-MUX编码

一、流程图 二、结构体 1 .AVOutputFormat 一、核心功能与作用 封装格式描述 AVOutputFormat保存了输出容器格式的元数据&#xff0c;包括&#xff1a; 短名称&#xff08;name&#xff09;&#xff1a;如flv、mp4&#xff1b;易读名称&#xff08;long_name&#xff09;&…...

青少年编程与数学 02-020 C#程序设计基础 05课题、数据类型

青少年编程与数学 02-020 C#程序设计基础 05课题、数据类型 一、数据类型及其意义1. 数据类型的概念1.1 值类型&#xff08;Value Types&#xff09;1.2 引用类型&#xff08;Reference Types&#xff09; 2. 数据类型的重要性2.1 类型安全示例 2.2 内存管理示例 2.3 性能优化示…...

React vs Vue.js:选哪个框架更适合你的项目?

摘要 前端开发江湖里&#xff0c;React 和 Vue.js 堪称两大 “顶流” 框架&#xff0c;不少开发者在选择时都犯了难。用 React 吧&#xff0c;听说它性能超强&#xff0c;可学习曲线也陡峭&#xff1b;选 Vue.js&#xff0c;有人夸它上手快&#xff0c;但又担心功能不够强大。…...

Kafka|基础入门

文章目录 快速了解Kafka快速上手Kafka理解Kafka的集群Kafka集群的消息流转模型 快速了解Kafka 快速上手Kafka 启动zookeeper 启动kafka 创建topic - 启动发送者 - 启动消费者 Partition 0: [msg1] -> [msg2] -> [msg3] -> ...0 1 2Partition 1: [msg4…...

ADS学习笔记(五) 谐波平衡仿真

参考书籍:见资源绑定,书籍4.2 谐波平衡仿真 本文为对实验内容的补充 1. 三阶交调点坐标系图分析 我们来分析图1.5中“三阶交调点”坐标系图里的两条直线分别代表什么。 图中有两条向上倾斜的直线&#xff1a; 斜率较低的那条直线代表&#xff1a;基波输出功率 (Fundamental Out…...

MySQL存储引擎对比及选择指南

MySQL 存储引擎是数据库底层管理数据存储和操作的核心组件&#xff0c;不同存储引擎在事务支持、性能、锁机制、存储方式等方面存在显著差异。以下是常见存储引擎的对比及其适用场景&#xff1a; 1. InnoDB 事务支持&#xff1a;支持 ACID 事务&#xff08;COMMIT/ROLLBACK&am…...

【IDEA问题】springboot本地启动应用报错:程序包不存在;找不到符号

问题&#xff1a; springboot本地启动应用报错&#xff1a; 程序包xxx不存在&#xff1b;找不到符号 解决方案&#xff1a; 1.确保用maven重新导入依赖 2.删除.idea文件夹 3.invalidate caches里&#xff0c;把能选择的都勾选上&#xff0c;然后清除缓存重启 4.再在上方工具栏…...

PETR- Position Embedding Transformation for Multi-View 3D Object Detection

旷视 ECCV 2022 纯视觉BEV方案transformer网络3D检测 paper&#xff1a;[2203.05625] PETR: Position Embedding Transformation for Multi-View 3D Object Detection code&#xff1a;GitHub - megvii-research/PETR: [ECCV2022] PETR: Position Embedding Transformation …...

Prompt Tuning与自然语言微调对比解析

Prompt Tuning 与输入提示词自然语言微调的区别和联系 一、核心定义与区别 维度Prompt Tuning(提示微调)输入提示词自然语言微调本质优化连续向量空间中的提示嵌入(不可直接阅读)优化离散自然语言文本(人类可理解)操作对象模型输入嵌入层的连续向量(如WordEmbedding)自…...

二十七、面向对象底层逻辑-SpringMVC九大组件之HandlerAdapter接口设计

在 Spring MVC 框架中&#xff0c;HandlerAdapter 是一个看似低调却极为关键的组件。它的存在&#xff0c;不仅解决了不同类型处理器&#xff08;Handler&#xff09;的调用难题&#xff0c;更体现了框架设计中对解耦、扩展性和模块化的深刻思考。本文将从接口设计的角度&#…...

QT软件开发环境及简单图形的绘制-图形学(实验一)-[成信]

对于软件的安装这里就不多介绍了。 本文章主要是根据本校图形学的实验知道来做。 创建一个简单的计算机图形学程序 第一步&#xff1a;创建项目及配置 这里创建的项目名和类名尽量和我的一样&#xff0c;避免后面直接复制我的代码时会出现一些名字上面的错误。QtWidgetsAppl…...

项目部署一次记录

链路&#xff1a;&#xff08;用户&#xff09;客户端 → Nginx:192.168.138.100→ Tomcat &#xff08;程序&#xff09;:192.168.138.101→ MySQL/Redis 打开数据库&#xff1a;systemctl start mysqld 重启网络&#xff1a; systemctl restart NetworkManager 关闭防火墙&am…...

单例模式,饿汉式,懒汉式,在java和spring中的体现

目录 饿汉式单例模式 懒汉式单例模式 Spring中的单例模式 关键差异对比 在Java和Spring中的应用场景 手写案例 单例模式是一种创建型设计模式&#xff0c;其核心在于确保一个类仅有一个实例&#xff0c;并提供一个全局访问点来获取该实例。下面将详细介绍饿汉式和懒汉式…...

一文带你彻底理清C 语言核心知识 与 面试高频考点:从栈溢出到指针 全面解析 附带笔者手写2.4k行代码加注释

引言&#xff1a;C 语言的魅力与挑战 从操作系统内核到嵌入式系统&#xff0c;从高性能计算到网络编程&#xff0c;C 语言高效、灵活和贴近硬件的特性&#xff0c;始终占据着不可替代的地位。然而&#xff0c;C 语言的强大也伴随着较高的学习曲线&#xff0c;尤其是指针、内存管…...

【Redis】第1节|Redis服务搭建

一、Redis 基础概念 核心功能 内存数据库&#xff0c;支持持久化&#xff08;RDB/AOF&#xff09;、主从复制、哨兵高可用、集群分片。常用场景&#xff1a;缓存、分布式锁、消息队列、计数器、排行榜等。 安装环境 依赖 GCC 环境&#xff08;C语言编译&#xff09;&#xff0…...

数据结构第5章 树与二叉树(竟成)

第 5 章 树与二叉树 【考纲内容】 1.树的基本概念 2.二叉树 &#xff08;1&#xff09;二叉树的定义及其主要特征 &#xff08;2&#xff09;二叉树的顺序存储结构和链式存储结构 &#xff08;3&#xff09;二叉树的遍历 &#xff08;4&#xff09;线索二叉树的基本概念和构造 …...

# 深入解析BERT自然语言处理框架:原理、结构与应用

深入解析BERT自然语言处理框架&#xff1a;原理、结构与应用 在自然语言处理&#xff08;NLP&#xff09;领域&#xff0c;BERT&#xff08;Bidirectional Encoder Representations from Transformers&#xff09;框架的出现无疑是一个重要的里程碑。它凭借其强大的语言表示能…...

ai学习--python部分-1.变量名及命名空间的存储

初学代码时总有一个问题困扰我&#xff1a;a 10 # a指向地址0x1234&#xff08;存储10&#xff09; 变量a的值10存储在0x1234&#xff0c;那么变量a需要存储吗&#xff1f;a又存储在什么地址呢 目录 1. ​​命名空间的本质​​ 2. ​​命名空间的内存占用​​ 3. ​​…...

Cadence学习笔记之---PCB过孔替换、封装更新,DRC检查和状态查看

目录 01 | 引 言 02 | 环境描述 03 | 过孔替换 04 | 封装更新 05 | PCB状态查看 06 | DRC检查 07 | 总 结 01 | 引 言 终于终于来到了Cadence学习笔记的尾声&#xff01; 在上一篇文章中&#xff0c;讲述了如何布线、如何铺铜&#xff0c;以及布线、铺铜过程中比较重要…...

Java基础 Day21

一、Stream 流 思想&#xff1a;流水线式思想 1、获取流对象&#xff08;将数据放到流中&#xff09; &#xff08;1&#xff09;集合获取 Stream 流对象 使用Collection接口的默认方法 default Stream<E> stream() 获取当前集合对象的 Stream 流&#xff08;单列集…...

系统开发和运行知识

软件生存周期 软件生存周期包括可行性分析与项目开发计划、需求分析、概要设计、详细设计、编码和单元测试、综合测试及维护阶段。 1、可行性分析与项目开发计划 主要任务是确定软件的开发目标及可行性。该阶段应该给出问题定义、可行性分析和项目开发计划。 2、需求分析 需求…...