OpenCV CUDA模块设备层-----在 GPU 上执行类似于 std::copy 的操作函数warpCopy()

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

算法描述

OpenCV 的 CUDA 模块(cudev) 中的一个设备端内联模板函数,用于在 GPU 上执行类似于 std::copy 的操作,但专门针对 warp 规模的数据复制
该函数的作用是:
将一个范围内的元素从输入迭代器 beg 到 end 之间复制到输出迭代器 out 所指向的位置。

函数原型

 template<class InIt , class OutIt >
__device__ __forceinline__ OutIt cv::cudev::warpCopy 	
( 	InIt  	beg,InIt  	end,OutIt  	out 
) 		

参数

  • InIt 输入迭代器类型(例如 PtrTraits<…>::ptr_type)
  • OutIt 输出迭代器类型(例如 PtrTraits<…>::ptr_type)

返回值

返回最终的输出迭代器 out,指向最后一个复制元素之后的位置,便于链式调用或后续操作。

使用场景

这个函数通常用于以下情况:

  • 在 CUDA kernel 中进行快速内存拷贝(如图像像素、数组等)
  • 实现自定义的图像变换或数据搬运逻辑
  • 构建更复杂的并行算法(如分块处理、扫描、归约)

它非常适合在每个线程负责多个数据项的场景下使用(即“warp-level”粒度的复制),可以提高内存访问效率和并行利用率。

代码

#include <opencv2/opencv.hpp>
#include <opencv2/cudaimgproc.hpp>
#include <opencv2/cudev.hpp>using namespace cv;
using namespace cv::cudev;// 使用 warpCopy 的 kernel,用于高效复制一行像素
template <typename T>
__global__ void copyWarpCopyKernel(PtrStep<T> src,               // 注意:不是 constPtrStep<T> dst,int roiX, int roiY,int roiWidth, int roiHeight)
{int y = blockIdx.y * blockDim.y + threadIdx.y;if (y < roiHeight) {T* srcRow = &src(roiY + y, roiX);  // 正确获取非 const 指针T* dstRow = &dst(y, 0);warpCopy(srcRow, srcRow + roiWidth, dstRow);}
}int main() {// 加载图像(灰度图)Mat h_src = imread("/media/dingxin/data/study/OpenCV/sources/images/Lenna.png", IMREAD_GRAYSCALE);if (h_src.empty()) {std::cerr << "Failed to load image!" << std::endl;return -1;}// 设置 ROI 参数int roiX = 100;int roiY = 50;int roiWidth = 320;int roiHeight = 240;// 上传到 GPUcuda::GpuMat d_src, d_dst;d_src.upload(h_src);d_dst.create(roiHeight, roiWidth, d_src.type());// 配置 kernel 参数(仅在 Y 方向并行)dim3 block(16, 16);dim3 grid(1, (roiHeight + block.y - 1) / block.y);// 启动 kernelcopyWarpCopyKernel<uchar><<<grid, block>>>(d_src, d_dst, roiX, roiY, roiWidth, roiHeight);// 下载结果Mat h_dst;d_dst.download(h_dst);// 显示结果imshow("Copied ROI", h_dst);waitKey(0);return 0;
}

运行结果

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/news/913365.shtml
繁体地址,请注明出处:http://hk.pswp.cn/news/913365.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Vue Router 中$route.path与 params 的关系

1. params 参数的本质&#xff1a;路径的动态片段在 Vue Router 中&#xff0c;params 参数是通过路由配置的动态路径片段定义的&#xff0c;例如&#xff1a;// 路由配置{ path: /user/:id, component: User }当访问/user/123时&#xff0c;/user/123是完整的路径&#xff0c;…

React 极简响应式滑块验证组件实现,随机滑块位置

&#x1f3af; 滑块验证组件 (Slider Captcha) 一个现代化、响应式的滑块验证组件&#xff0c;专为 React 应用设计&#xff0c;提供流畅的用户体验和强大的安全验证功能。 ✨ 功能特性 &#x1f3ae; 核心功能 智能滑块拖拽 – 支持鼠标和触摸屏操作&#xff0c;响应灵敏随…

STM32第十六天蓝牙模块

一&#xff1a;蓝牙模块HC-05 1&#xff1a;硬件引脚配置&#xff1a; | 标号 | PIN | 说明 | |------|-------|---------------------------------------| | 1 | START | 状态引出引脚&#xff08;未连接/连接输出信号时&#xff09; |…

时序数据库IoTDB用户自定义函数(UDF)使用指南

1. 编写UDF时序数据库IoTDB为用户提供了编写UDF的JAVA API&#xff0c;用户可以自主实现UDTF&#xff08;用户自定义转换函数&#xff09;类&#xff0c;IoTDB将通过类加载机制装载用户编写的类。Maven依赖如果使用Maven&#xff0c;可以从Maven库中搜索以下依赖&#xff0c;并…

Linux国产与国外进度对垒

Linux国产与国外进度对垒 引言国产Linux的发展现状国外Linux的发展现状技术对比国产Linux的挑战与机遇国外Linux的优势与局限结论 引言 简述Linux在全球操作系统市场中的地位国产Linux的发展背景与意义国外主流Linux发行版的现状 国产Linux的发展现状 主要国产Linux发行版介…

Jenkins-Email Extension 插件插件

Editable Email Notification Editable Email Notification 是 Jenkins 的 Email Extension 插件的核心功能&#xff0c;用于自定义邮件通知&#xff0c;包括邮件主题、内容、收件人、发件人等 属性 1.Project From 项目发件人&#xff0c;设置邮件的发件人地址 **注意&…

windows系统下将Docker Desktop安装到除了C盘的其它盘中

windows系统下安装docker会自动安装到C盘&#xff0c;可以采用下面的方法将其安装到其它盘中1、先下载Docker Desktop安装程序Docker Desktop Installer.exe&#xff0c;比如你下载到了C:\Users\YourUsername\Downloads 文件夹中。 2、打开 PowerShell 进入C:\Users\YourUser…

视频工具箱 1.1.1 |小而美的视频处理工具,支持多种常用功能

VideoTools是一款基于FFmpeg的小而美的视频处理工具&#xff0c;专为需要快速高效地进行视频编辑的用户设计。这款工具无需安装&#xff0c;体积仅约200KB&#xff0c;提供了视频压缩、格式转换、转GIF、修改分辨率、加速播放以及音频提取等多种常用功能。其用户界面简洁直观&a…

无人机集群搜索技术全面解析

无人机集群搜索是指通过多架无人机协同工作&#xff0c;实现对目标区域的高效覆盖与快速探测。这项技术通过模拟自然界生物群体的集体行为&#xff0c;利用分布式控制和自主决策算法&#xff0c;使无人机集群能够自组织地完成复杂搜索任务。下面从核心技术、应用场景、算法实现…

【Elasticsearch】深度分页及其替代方案

深度分页及其替代方案 1.深度分页2.为什么不推荐深度分页2.1 性能问题&#xff08;核心原因&#xff09;2.2 资源消耗对比2.3 实际限制 3.深度分页的替代方案3.1 方案一&#xff1a;Search After&#xff08;推荐&#xff09;3.1.1 为什么 Search After 性能更高3.1.2 技术原理…

论文阅读笔记——VGGT: Visual Geometry Grounded Transformer

VGGT 论文 输入是 N 个 RGB 图像 I i ∈ R 3 H W I_i\in\mathbb{R}^{3HW} Ii​∈R3HW 的序列 ( I i ) i 1 N (I_i)^N_{i1} (Ii​)i1N​&#xff0c;观察相同 3D 场景。 VGGT 的 Transformer 是一个映射函数&#xff0c;将此序列映射为一组对应的 3D 标注&#xff0c; f ( …

【嵌入式电机控制#11】PID控制入门:对比例算法应用的深度理解

接下来内容需要数学功底&#xff0c;并且有现成结论的内容不做推导&#xff0c;重在讲解工程实践中的方法论&#xff0c;建议控制类专业或学习过相关理论的人阅读 一、开闭环系统 &#xff08;1&#xff09;开环控制系统&#xff1a;被控对象输出对控制器的输出没有影响 &…

多视图几何:本质矩阵与基础矩阵

文章目录 1. 前置知识1.1. 向量叉乘1.2. 混合积1.3. 引理证明 2. 本质矩阵3. 基础矩阵4. 应用例子 1. 前置知识 1.1. 向量叉乘 假设 a ( a x a y a z ) \mathbf{a} \begin{pmatrix} a_x \\ a_y \\ a_z \end{pmatrix} a ​ax​ay​az​​ ​ 以及 b ( b x b y b z ) \mat…

Hive集群之间迁移的Linux Shell脚本

新旧 Hive 集群之前数据迁移单表脚本 migrate_hive_single_table.sh #!/bin/bash#配置参数 OLD_NAMENODE"hdfs://<old-namenode>:<old-port>" EXPORT_PATH"/tmp/hive-export/dm" NEW_DB"dm_events" TABLE_NAME"dm_usereventfi…

新时代的开始,华为开源仓颉编程语言!

7月30日&#xff0c;华为即将开源自研的仓颉编程语言。 仓颉这个名字很有意思。传说中的仓颉创造了汉字&#xff0c;开启了中华文明的文字时代。华为用这个名字&#xff0c;体现了对中华文化的致敬。从2020年开始研发&#xff0c;到去年首次亮相&#xff0c;再到现在的全面开源…

【python实用小脚本-128】基于 Python 的 Hacker News 爬虫工具:自动化抓取新闻数据

引言 在技术社区中&#xff0c;Hacker News 是一个汇聚最新技术文章和讨论的热门平台。许多开发者和技术爱好者依赖它来获取行业动态和前沿资讯。然而&#xff0c;手动浏览和筛选这些文章可能耗时且低效。本文将介绍一个基于 Python 的 Hacker News 爬虫工具&#xff0c;它能够…

mac 电脑安装Homebrew来安装npm与node成功后,安装nvm的流程

文章目录 前言一、卸载node(如果没下载可以忽略这步)1.官网下载安装包的2. homebrew安装的 二、安装Homebrew(1) 命令安装&#xff08;2&#xff09;出现上面提示&#xff0c;执行对应的命令&#xff08;3&#xff09;校验是否安装成功 三&#xff1a;安装node&#xff08;Home…

根据无人机倾斜摄影osgb做的3dmax模型3dtiles制作,导出.b3dm加载到谷歌地图cesiumlab

根据无人机倾斜摄影osgb做的3dmax模型3dtiles制作&#xff0c;导出.b3dm加载到谷歌地图cesiumlab 根据无人机倾斜摄影osgb做的3dmax模型3dtiles制作&#xff0c;导出.b3dm加载到谷歌地图cesiumlab

Yocto项目:嵌入式Linux开发的“万能烹饪手册”

目录 一.Yocto是什么? 二.Yocto如何运作&#xff1f; 2.1 三大核心工具 2.2 实例 三.为什么开发者爱用Yocto&#xff1f; 3.1 ​自由定制&#xff0c;拒绝“全家桶”​​ 3.2 跨平台支持&#xff1a;从x86到火星芯片​ 3.3 工业级可靠性​ PetaLinux是Xilinx官方推出的…

【nosql】有哪些非关系型数据库?

非关系型数据库Nosql 分类 键值存储 (Key-Value Store): 代表: Redis, DynamoDB, RocksDB, etcd核心优势: 极致简单、超高读写性能&#xff08;尤其内存型&#xff09;、高吞吐。场景: 缓存、会话存储、配置、计数器、分布式协调、简单消息队列。 列式 / 宽列存储 (Wide-Colu…