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

OpenCV CUDA 模块特征检测与描述------在GPU上执行特征描述符匹配的类cv::cuda::DescriptorMatcher

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

算法描述

cv::cuda::DescriptorMatcher 是 OpenCV 的 CUDA 模块中用于在 GPU 上执行特征描述符匹配的类。它允许你利用 NVIDIA GPU 的并行计算能力来加速特征匹配过程,这对于需要实时处理或处理大规模数据集的应用来说非常有用。

主要功能

  • 特征描述符匹配:可以在 GPU 上高效地匹配两组特征描述符(如 SIFT、SURF 等)。
  • 多种匹配策略:支持 K-最近邻匹配(KNN)、基于半径的匹配等。
  • 跨平台兼容性:能够在任何支持 CUDA 的平台上运行。

类概述

以下是 cv::cuda::DescriptorMatcher 的一些关键成员函数和说明:

构造函数

DescriptorMatcher(const Ptr& matcher):创建一个 DescriptorMatcher 对象,通常使用其派生类(例如 BruteForceMatcher 或 FlannBasedMatcher)进行实例化。

匹配方法

  • void match(Ptr& queryDescriptors, std::vector& matches, const GpuMat& trainDescriptors = GpuMat()):在两组描述符之间找到最佳匹配项。
  • void knnMatch(Ptr& queryDescriptors, std::vector<std::vector>& matches, int k, const GpuMat& trainDescriptors = GpuMat(), bool compactResult = false):为每一条查询描述符找到其前 k 个最佳匹配。
  • void radiusMatch(Ptr& queryDescriptors, std::vector<std::vector>& matches, float maxDistance, const GpuMat& trainDescriptors = GpuMat(), bool compactResult = false):找到所有距离小于指定最大值的匹配。

添加训练描述符

  • void add(const std::vector& descriptors):添加一组训练描述符。
  • void clear():清除所有的训练描述符。

获取训练描述符

  • std::vector getTrainDescriptors() const:返回当前所有的训练描述符。
  • bool isMaskSupported() const:检查是否支持掩码。

示例代码

下面是一个简单的示例,演示如何使用 cv::cuda::DescriptorMatcher 进行特征匹配:

#include <opencv2/cudafeatures2d.hpp>
#include <opencv2/cudaimgproc.hpp>
#include <opencv2/opencv.hpp>int main()
{// 加载图像cv::Mat img1 = cv::imread( "/media/dingxin/data/study/OpenCV/sources/images/left.jpg", cv::IMREAD_GRAYSCALE );cv::Mat img2 = cv::imread( "/media/dingxin/data/study/OpenCV/sources/images/right.jpg", cv::IMREAD_GRAYSCALE );if ( img1.empty() || img2.empty() ){std::cerr << "无法加载图像" << std::endl;return -1;}// 转换到 GPU 内存cv::cuda::GpuMat d_img1( img1 ), d_img2( img2 );// 创建 CUDA ORB 检测器cv::Ptr< cv::cuda::ORB > orb = cv::cuda::ORB::create();// 存储结果:关键点是 CPU 上的 vector,描述符是 GPU 上的 GpuMatstd::vector< cv::KeyPoint > keypoints1, keypoints2;cv::cuda::GpuMat descriptors1, descriptors2;// 提取关键点和描述符orb->detectAndCompute( d_img1, cv::cuda::GpuMat(), keypoints1, descriptors1 );orb->detectAndCompute( d_img2, cv::cuda::GpuMat(), keypoints2, descriptors2 );// 创建匹配器cv::Ptr< cv::cuda::DescriptorMatcher > matcher = cv::cuda::DescriptorMatcher::createBFMatcher( cv::NORM_HAMMING );// 匹配描述符std::vector< cv::DMatch > matches;matcher->match( descriptors1, descriptors2, matches );// 将 GPU 描述符下载回 CPU(如果需要可视化)cv::Mat descriptors1_cpu, descriptors2_cpu;descriptors1.download( descriptors1_cpu );descriptors2.download( descriptors2_cpu );// 绘制匹配结果cv::Mat img_matches;cv::drawMatches( img1, keypoints1, img2, keypoints2, matches, img_matches );cv::imshow( "Matches", img_matches );cv::waitKey( 0 );return 0;
}

运行结果

在这里插入图片描述

相关文章:

OpenCV CUDA 模块特征检测与描述------在GPU上执行特征描述符匹配的类cv::cuda::DescriptorMatcher

操作系统&#xff1a;ubuntu22.04 OpenCV版本&#xff1a;OpenCV4.9 IDE:Visual Studio Code 编程语言&#xff1a;C11 算法描述 cv::cuda::DescriptorMatcher 是 OpenCV 的 CUDA 模块中用于在 GPU 上执行特征描述符匹配的类。它允许你利用 NVIDIA GPU 的并行计算能力来加速特…...

idea如何让文件夹分层显示,而不是圆点分割

网上说是点击小齿轮的都是过时了&#xff0c;对于新版idea不适用&#xff0c;直接上图 1、如图 2、如图 注意也是去掉Compact Middle Packages&#xff0c;只不过新版的方式UI和老版本的不一样了...

5:OpenCV—直方图均衡化

直方图均衡 直方图均衡是一种用于增强和调整图像对比度的图像处理技术。它通过重新分配图像的像素值&#xff0c;使得图像的灰度级在整个范围内均匀分布&#xff0c;从而增强图像的视觉效果。 图像的直方图是像素强度分布的图形表示。它提供了像素值集中位置以及是否存在异常偏…...

内存分页法

现在有个场景&#xff0c;页面需要分页处理&#xff0c;但是后端在查询完数据库后又会进行筛选&#xff0c;就会导致后端的查询数目跟请求的每页条数是不一样。 解决方案&#xff1a;内存分页法 在内存筛选后手动实现分页逻辑&#xff0c;保证返回数量与请求的 pageSize 一致…...

深入解析FramePack:高效视频帧打包技术原理与实践

摘要 本文深入探讨FramePack技术在视频处理领域的核心原理&#xff0c;解析其在不同场景下的应用优势&#xff0c;并通过OpenCV代码示例演示具体实现方法&#xff0c;为开发者提供可落地的技术解决方案。 目录 1. FramePack技术背景 2. 核心工作原理剖析 3. 典型应用场景 …...

【EI会议火热征稿中】第二届云计算与大数据国际学术会议(ICCBD 2025)

# ACM独立出版 | EI检索稳定、往届会后4个半月完成EI检索 # 热门征稿主题&#xff1a;大数据、5G/6G、物联网、云计算 # 早投稿早送审早录用&#xff01; 重要信息 大会官网&#xff1a;www.iccbd.net 会议主页&#xff1a;【ACM独立出版|EI稳定】第二届云计算与大数据国际…...

对未来软件的看法

有了大模型之后&#xff0c;TypeScript这样增强型javascript语言可能更方便AI来调试。未来的应用会越来越广泛。node.js vue.js会越来越流行。因为方便AI调试&#xff0c;处理错误。 未来&#xff0c;随着 AI 编程工具对 TypeScript 的深度支持&#xff08;如自动类型推导、错误…...

新兴技术与安全挑战

7.1 云原生安全(K8s安全、Serverless防护) 核心风险与攻击面 Kubernetes配置错误: 风险:默认开放Dashboard未授权访问(如kubectl proxy未鉴权)。防御:启用RBAC,限制ServiceAccount权限。Serverless函数注入: 漏洞代码(AWS Lambda):def lambda_handler(event, cont…...

Prompt Tuning:轻量级大模型微调全攻略

Prompt Tuning(提示调优)步骤金额流程 传统的 Prompt Tuning(提示调优) 是一种轻量级的大模型微调技术,核心是通过优化连续的提示向量(而非模型参数)来适配特定任务。 一、核心步骤概述 准备任务与数据 明确任务类型(如分类、问答等),准备输入文本和目标标签。加载…...

centos7安装mysql8.0

yum install -y mysql-community-server --nogpgcheckcentos7.9安装mysql8.0 在 CentOS 7.9 上安装 MySQL 8.0&#xff0c;你可以通过多种方式实现&#xff0c;但最推荐的方法是使用 MySQL 官方提供的 yum 仓库。这样可以确保安装的 MySQL 版本是最新的&#xff0c;并且易于管理…...

ZooKeeper 原理解析及优劣比较

大家好&#xff0c;这里是架构资源栈&#xff01;点击上方关注&#xff0c;添加“星标”&#xff0c;一起学习大厂前沿架构&#xff01; 引言 在分布式系统中&#xff0c;服务注册、配置管理、分布式锁、选举等场景都需要一个高可用、一致性强的协调服务。Apache ZooKeeper 凭…...

OD 算法题 B卷 【需要打开多少监视器】

文章目录 需要打开多少监视器 需要打开多少监视器 某长方形停车场&#xff0c;每个车位上方都有对应监控器&#xff0c;在当前车位和前后左右四个方向任意一个车位范围停车时&#xff0c;监控器才需要打开。给出某一时刻停车场的停车分布&#xff0c;统计最少需要打开多少个监…...

鸿蒙路由参数传递

页面test.ets 代码如下&#xff1a; import router from ohos.router Entry Component struct Test {State message: string Hello WorldState username: string huState password: string 1build() {Row() {Column() {Text(this.message).fontSize(50).fontWeight(FontWe…...

课程与考核

6.1 课程讲解与实战考核 6.1.1 SQL注入篇考核 考核目标&#xff1a;通过手动注入与工具结合&#xff0c;获取目标数据库敏感信息。 题目示例&#xff1a; 目标URL&#xff1a;http://vuln-site.com/product?id1 要求&#xff1a; 判断注入类型&#xff08;联合查询/报错注…...

CNN、RNN、Transformer对于长距离依赖的捕捉能力分析

卷积网络CNN主要依靠深度来捕捉长距离依赖。但这个过程太间接了&#xff0c;因为信息在网络中实际传播了太多层。究竟哪些信息被保留&#xff0c;哪些被丢弃了&#xff0c;弄不清楚。从实践经验来看&#xff0c;卷积网络捕捉长依赖的能力非常弱。这也是为什么在大多数需要长依赖…...

封装POD与PinMap文件总结学习-20250516

基本概念 芯片封装外形图&#xff08;POD&#xff0c;Package Outline Drawing&#xff09;&#xff0c;详细描述了芯片的物理尺寸、引脚布局和封装类型等信息&#xff1b; Pin Map是芯片封装的一个重要概念。它是一张详细描述芯片封装外形上各个引脚&#xff08;Pin&#xff…...

Qt项目开发中所遇

讲述下面代码所表示的含义&#xff1a; QWidget widget_19 new QWidget(); QVBoxLayout *touchAreaLayout new QVBoxLayout(widget_19);QWidget *buttonArea new QWidget(widget_19); 1、新建一个名为widget_19的QWidget&#xff0c;将给其应用垂直管路布局。 2、新建一个…...

ubuntu chrome无法使用搜狗拼音输入法,无法输入中文

安装好搜狗输入法后用了很久&#xff0c;突然有一天点击chrome自动升级后就没法用了&#xff0c;在别的软件都能用&#xff0c;还以为是配置问题&#xff0c;就在网上搜了好一阵子才找到解决方案&#xff0c;各种找问题&#xff0c;最后发现是需要安装fcitx5-frontend-gtk4&…...

数据结构与算法分析实验14 实现基本排序算法

实现基本排序算法 1. 常用的排序算法简介2. 上机要求3. 上机环境4.程序清单(写明运行结果及结果分析)4.1 程序清单4.1.1 头文件 sort.h 内容如下&#xff1a;4.1.2 实现文件 sort.cpp 内容如下&#xff1a;4.1.3 源文件 main.cpp 内容如下&#xff1a; 4.2 实现展效果示 5.上机…...

uni-app 中使用 mumu模拟器 进行调试和运行详细教程

一、下载mumu模拟器 二、复制安装路径暴保留 在文件夹中打开 三、配置全局adb命令 adb为Android Debug Bridge&#xff0c;就是起到调试桥的作用 打开shell文件夹、里面有一个adb.exe 将当前文件夹地址复制一下&#xff0c;即‘D:\Program Files\Netease\MuMu Player 12\sh…...

Visual Studio Code 改成中文模式(汉化)

1、打开工具软件&#xff08;双击打开&#xff09; 2、软件左边图标点开 3、在搜索框&#xff0c;搜索 chinese 出现的第一个 就是简体中文 4、点击第一个简体中文&#xff0c;右边会出来基本信息 点击 install 就可以安装了&#xff08;记得联网&#xff09;。 5、安装完右…...

破解 PCB 制造四大痛点:MOM 系统构建智能工厂新范式

在全球电子信息产业加速向智能化、高端化转型的背景下&#xff0c;PCB&#xff08;印制电路板&#xff09;作为 "电子产品之母"&#xff0c;既是支撑 5G 通信、新能源汽车、人工智能等战略新兴产业发展的核心基础部件&#xff0c;也面临着 "多品种小批量快速切换…...

【基于深度学习的非线性光纤单像素超高速成像】

基于深度学习的非线性光纤单像素超高速成像是一种结合深度学习技术和单像素成像方法的前沿技术&#xff0c;旨在实现高速、高分辨率的成像。以下是一些关键点和方法&#xff1a; 深度学习在单像素成像中的应用 深度学习技术可以通过训练神经网络来优化单像素成像的重建过程。…...

Backend - Oracle SQL

目录 一、CRUD 增删改查&#xff08;基础&#xff09; &#xff08;一&#xff09;查询 &#xff08;二&#xff09;插入 &#xff08;三&#xff09;更新 &#xff08;四&#xff09;清空 二、常用 SQL 1. exists 搭配 select 1 2. FROM DUAL 3. INSTR()函数 4. 提取…...

WebSocket心跳机制

通常&#xff0c;心跳机制包括&#xff1a; 定期发送消息(如ping)到服务器以保持连接活跃检测服务器的相应(pong)如果一段时间没有收到相应&#xff0c;可能需要重新连接 ::: warning 在连接关闭或者发生错误时&#xff0c;清除心跳定时器&#xff0c;避免内存泄漏 ::: 在实现…...

计算机视觉与深度学习 | PSO-MVMD粒子群算法优化多元变分模态分解(Matlab完整代码和数据)

以下是一个基于PSO优化多元变分模态分解(MVMD)的Matlab示例代码框架,包含模拟数据生成和分解结果可视化。用户可根据实际需求调整参数。 %% 主程序:PSO优化MVMD参数 clc; clear; close all;% 生成模拟多变量信号 fs = 1000; % 采样频率 t = 0:1/fs:...

Fast Video Cutter Joiner v6.8.2 视频剪切合并器汉化版

想要快速拆解冗长视频&#xff0c;或是将零散片段拼接成完整作品&#xff1f;Fast Video Cutter Joiner 正是你需要的宝藏视频编辑软件&#xff01;它以强大功能为核心&#xff0c;将复杂的视频处理变得简单直观。​ 精准的切割与合并功能&#xff0c;让你能随心所欲地裁剪视频…...

【漫话机器学习系列】269.K-Means聚类算法(K-Means Clustering)

一、K-Means 聚类算法简介 K-Means 是一种基于距离的无监督机器学习算法&#xff0c;属于聚类算法&#xff08;Clustering Algorithm&#xff09;。它的目标是将数据集划分为 K 个不重叠的子集&#xff08;簇&#xff09;&#xff0c;使得每个子集中的数据点尽可能相似&#x…...

【北邮通信系统建模与仿真simulink笔记】(1)主要用到的模块库介绍

【声明】 本博客仅用于记录博主学习内容、分享笔记经验&#xff0c;不得用作其他非学术、非正规用途&#xff0c;不得商用。本声明对本博客永久生效&#xff0c;若违反声明所导致的一切后果&#xff0c;本博客均不负责。 目录 1、信号源模块库&#xff08;Sources&#xff09…...

【信息系统项目管理师】第11章:项目成本管理 - 32个经典题目及详解

更多内容请见: 备考信息系统项目管理师-专栏介绍和目录 文章目录 【第1题】【第2题】【第3题】【第4题】【第5题】【第6题】【第7题】【第8题】【第9题】【第10题】【第11题】【第12题】【第13题】【第14题】【第15题】【第16题】【第17题】【第18题】【第19题】【第20题】【第…...

Java转Go日记(四十四):Sql构建

1.1.1. 执行原生SQL db.Exec("DROP TABLE users;")db.Exec("UPDATE orders SET shipped_at? WHERE id IN (?)", time.Now, []int64{11,22,33})// Scantype Result struct {Name stringAge int}var result Resultdb.Raw("SELECT name, age FROM use…...

数组day2

209长度最小的子数组 class Solution { public:int minSubArrayLen(int s, vector<int>& nums) {int result INT32_MAX;int sum 0; // 滑动窗口数值之和int i 0; // 滑动窗口起始位置int subLength 0; // 滑动窗口的长度for (int j 0; j < nums.size(); j) …...

《Effective Python》第三章 循环和迭代器——永远不要在迭代容器的同时修改它们

引言 本文基于《Effective Python: 125 Specific Ways to Write Better Python, 3rd Edition》第3章“循环和迭代器”中的 Item 22&#xff1a;“Never Modify Containers While Iterating over Them; Use Copies or Caches Instead&#xff08;永远不要在迭代容器的同时修改它…...

SQLite基础及优化

SQLite 什么是SQLite SQLite&#xff0c;是一款轻型的数据库&#xff0c;是遵守ACID的关系型数据库管理系统&#xff0c;它包含在一个相对小的C库中。它是D.RichardHipp建立的公有领域项目。它的设计目标是嵌入式的&#xff0c;而且目前已经在很多嵌入式产品中使用了它&#…...

数据库与存储安全

2.1 SQL注入攻防实战(手工注入、自动化工具) 攻击原理与分类 联合查询注入:通过UNION SELECT窃取数据。 UNION SELECT 1,username,password FROM users-- 布尔盲注:利用页面响应差异逐位提取数据。 AND (SELECT SUBSTRING(password,1,1) FROM users WHERE id=1)=a-- 时间…...

vue3/vue2大屏适配

vue3-scale-box 和 vue2-scale-box 可以帮助你在不同 Vue 版本中实现大屏自适应缩放。vue3-scale-box - npmvue3 scale box. Latest version: 0.1.9, last published: 2 years ago. Start using vue3-scale-box in your project by running npm i vue3-scale-box. There is 1 o…...

【数据结构 -- AVL树】用golang实现AVL树

目录 引言定义旋转方式LL型RR型LR型RL型 实现结构获取结点高度平衡因子更新高度左旋右旋插入结点中序遍历 引言 AVL树&#xff0c;基于二叉搜索树通过平衡得到 前面我们知道&#xff0c;通过&#x1f517;二叉搜索树可以便捷快速地查找到数据&#xff0c;但是当序列有序时&am…...

matlab慕课学习3.5

于20250520 3.5 用while 语句实现循环结构 3.5.1while语句 多用于循环次数不确定的情况&#xff0c;循环次数确定的时候用for更为方便。 3.5.2break语句和continue语句 break用来跳出循环体&#xff0c;结束整个循环。 continue用来结束本次循环&#xff0c;接着执行下一次…...

【jmeter】base64加密

base64加密 执行的脚本&#xff1a; import java.io.*; import sun.misc.BASE64Encoder; String strvars.get("param") #设置了一个user paramBASE64Encoder encodernew BASE64Encoder() log.info("--------start----------") String resultencoder.encod…...

优化Hadoop性能:如何修改Block块大小

在处理大数据时&#xff0c;Hadoop的性能和资源管理是至关重要的。Hadoop的分布式文件系统&#xff08;HDFS&#xff09;将数据切割成多个块&#xff08;Block&#xff09;&#xff0c;并将这些块分布在集群中的不同节点上。在默认情况下&#xff0c;HDFS的块大小可能并不适合所…...

jmeter转义unicode变成中文

打开jmeter&#xff0c;添加后置处理器到接口请求后&#xff0c;在添加完成后将代码复制进入 &#xff08;注意&#xff1a;最后执行后需要到“察看结果树”里看&#xff0c;需要自行添加对应的监听器&#xff09; 按如下添加代码进入上图位置&#xff1a; //如下复制于链接&…...

ALSA 插件是什么? PortAudio 断言失败是什么意思?

下面用更简单的语言和图文形式帮你理解&#xff1a; 1. ALSA 插件是什么&#xff1f;为什么重要&#xff1f; 想象你电脑里的音频系统就像一个厨房&#xff0c;ALSA 是厨房里的厨师&#xff0c;负责做出声音&#xff08;做菜&#xff09;和收集声音&#xff08;收菜&#xff0…...

计算机科技笔记: 容错计算机设计05 n模冗余系统 双模冗余系统 Duplex Systems

接收测试 测试 &#xff08;HA服务器的方法&#xff09; HA系统 一、基本HA结构 当前常用的HA&#xff08;High Availability&#xff09;系统结构大体如下&#xff1a; 双机结构&#xff1a;两台主机&#xff08;可称为主机A和主机B&#xff09; 两种运行模式&#xff1a; A…...

Translational Psychiatry | 注意缺陷多动障碍儿童延迟厌恶的行为与神经功能特征茗创科技茗创科技

摘要 尽管已有大量研究致力于解析注意缺陷多动障碍(ADHD)中的认知异质性&#xff0c;但对其动机变化(尤其是延迟厌恶)的探索仍相对有限。本研究旨在通过识别ADHD儿童的同质性延迟厌恶特征来理解其动机缺陷&#xff0c;采用体验式延迟贴现任务对43名ADHD儿童和47名对照参与者(经…...

MYSQL备份恢复知识:第四章:备份锁

为了获得备份数据的一致性&#xff0c;需要在数据库中加锁&#xff0c;保证在备份期间没有数据变化。早期版本的MySQL仅支持表级锁&#xff0c;在加锁期间不允许访问数据库&#xff0c;这对生产环境是极大的挑战。因此&#xff0c;在后续版本中引入了实例级锁&#xff0c;使得备…...

寻找最优美做题曲线

题目描述 一个有趣的评测功能&#xff0c;就是系统自动绘制出用户的“做题曲线”。所谓做题曲线就是一条曲线&#xff0c;或者说是折线&#xff0c;是这样定义的&#xff1a;假设某用户在第 bi​ 天 AC 了 ci​ 道题&#xff0c;并且 bi​ 严格递增&#xff0c;那么该用户的做…...

DeepSeek-V3 vs GPT-4:技术对比与性能评测

DeepSeek-V3 vs GPT-4&#xff1a;技术对比与性能评测 系统化学习人工智能网站&#xff08;收藏&#xff09;&#xff1a;https://www.captainbed.cn/flu 文章目录 DeepSeek-V3 vs GPT-4&#xff1a;技术对比与性能评测摘要引言技术架构对比1. 模型结构&#xff1a;稠密模型 …...

【Fifty Project - D29】

今日完成记录 TimePlan完成情况7&#xff1a;30 - 9&#xff1a;00大论文修改以及小论文修改√9&#xff1a;00 - 9&#xff1a;30整理近期购置物品项√9&#xff1a;30 - 10&#xff1a;00约了个画稿做个毕业冰箱贴&#xff01;√10&#xff1a;00 - 11&#xff1a;30Leetcod…...

创建一个使用 GPT-4o 和 SERP 数据的 RAG 聊天机器人

亮数据-网络IP代理及全网数据一站式服务商屡获殊荣的代理网络、强大的数据挖掘工具和现成可用的数据集。亮数据&#xff1a;网络数据平台领航者https://www.bright.cn/?promogithub15?utm_sourceorganic-social-cn&utm_campaigncsdn 本指南将解释如何使用 Python、GPT-4…...

安装PostgresSQL

目录 安装postgressql所需的依赖环境 编译安装 解压源码包 切换目录 --prefix指定安装目录 编译以及安装 配置环境创建用户 创建数据存储目录 更改数据存储目录的归属用户 配置环境变量 登录数据库 Dnf安装 安装postgresql 初始化数据库 登录数据库 postgresql…...