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

OpenCV CUDA模块图像特征检测与描述------图像中快速检测特征点类cv::cuda::FastFeatureDetector

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

算法描述

cv::cuda::FastFeatureDetector 是 OpenCV 的 CUDA 加速模块中的一部分,用于在图像中快速检测特征点。FAST(Features from Accelerated Segment Test)算法是一种高效的角点检测算法,能够在保持较高精度的同时显著提高速度。

cv::cuda::FastFeatureDetector 提供了 GPU 加速的 FAST 角点检测功能。它继承自 cv::Algorithm 类,并且实现了与 CPU 版本的 cv::FastFeatureDetector 相似的接口,但利用了 CUDA 来加速计算过程。

主要成员函数

构造函数

  cv::cuda::FastFeatureDetector::FastFeatureDetector(int threshold=10, bool nonmaxSuppression=true, int type=cv::FastFeatureDetector::TYPE_9_16)
  • threshold: 阈值,用来判断一个像素是否为角点。
  • nonmaxSuppression: 是否启用非极大值抑制来过滤掉一些不是最强响应的角点。
  • type: 指定使用的FAST类型,可以是 TYPE_9_16, TYPE_7_12, 或者 TYPE_5_8,分别对应不同的测试模式。

检测函数

   void detect(cv::InputArray image,cv::Ptr<cv::cuda::GpuMat>& keypoints, cv::Stream& stream = cv::cuda::Stream::Null())
  • image: 输入图像,通常是一个灰度图(CV_8UC1),也可以是彩色图(CV_8UC3),但会被转换为灰度图处理。
  • keypoints: 输出的关键点集合。
  • stream: 可选参数,指定CUDA流以实现异步操作。

示例代码

#include <opencv2/cudafeatures2d.hpp>
#include <opencv2/cudaimgproc.hpp>
#include <opencv2/opencv.hpp>int main()
{// 加载图像cv::Mat img = cv::imread( "/media/dingxin/data/study/OpenCV/sources/images/Lenna.png", cv::IMREAD_GRAYSCALE );if ( img.empty() ){std::cerr << "无法加载图像" << std::endl;return -1;}// 将图像上传到 GPUcv::cuda::GpuMat d_img( img );// 创建 FastFeatureDetectorcv::Ptr< cv::cuda::FastFeatureDetector > detector = cv::cuda::FastFeatureDetector::create( 30 );  // 设置阈值为30// 检测特征点std::vector< cv::KeyPoint > keypoints;detector->detect( d_img, keypoints );// 绘制特征点cv::Mat img_keypoints;cv::drawKeypoints( img, keypoints, img_keypoints );cv::imshow( "FAST Feature Detector", img_keypoints );cv::waitKey( 0 );return 0;
}

运行结果

在这里插入图片描述

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

相关文章:

  • CSS【详解】弹性布局 flex
  • C++ 11(1):
  • 是德科技 | 单通道448G未来之路:PAM4? PAM6? PAM8?
  • Axure设计之带分页的穿梭框原型
  • Oracle基础知识(二)
  • Open3D 半径滤波器
  • Enhanced RTMP H.265(HEVC)技术规格解析:流媒体协议的新突破
  • labelme进行关键点标注并转换为yolo格式
  • Vue3 与 Vue2 区别
  • Vue大数据量前端性能优化策略
  • Linux 文件(3)
  • 计算机网络--第一章(下)
  • 【Java】封装在 Java 中是怎样实现的?
  • 面经总目录——持续更新中
  • 数据库基础
  • 写实数字人在展厅的应用:探索无限可能
  • Rocketmq刷盘机制和复制机制区别及关系
  • 超长文本注意力机制如何突破传统 O(n²) 瓶颈
  • 【Redis】哈希表结构
  • Baklib构建AI就绪型知识中台实践
  • 内网穿透:轻松实现外网访问本地服务
  • 至此(day1-day4)代码详解(ai辅助整理)
  • IEEEtran中文献中的作者大于3个时,用et al.省略
  • 院校机试刷题第八天:B3846闰年求和、P1012字母异位词分组
  • 使用亮数据代理IP+Python爬虫批量爬取招聘信息训练面试类AI智能体(手把手教学版)
  • 算法第24天|93.复原IP地址、 78.子集、 90.子集II
  • Java 10IO流
  • DockerHub被封禁,怎么将镜像传到国内?一种简单合规的镜像同步到国内方案[最佳实践]
  • KLEC--基于知识学习的演化计算算法
  • 硬盘健康检测与性能测试的实践指南