使用“OpenCV函数”和“ORB-SLAM2源码中的ExtractORB()函数”提取ORB特征点

 

 

 

#include "ORB/global_defination/global_defination.h"  // 导入ORB的全局定义
#include "ORB/ORBFeature.hpp"  // 导入ORB特征相关的头文件using namespace ORB;  // 使用ORB命名空间int main(int argc, char** argv)
{google::InitGoogleLogging(argv[0]);  // 初始化Google日志系统,参数是程序名FLAGS_alsologtostderr = true;  // 将日志同时输出到标准错误输出std::string config_path = WORK_SPACE_PATH + "/config/camera_para.yaml";  // 相机参数配置文件的路径std::string image_path = WORK_SPACE_PATH + "/image/distorted.png";  // 图像文件的路径// 创建一个ORB特征的对象,使用智能指针管理其生命周期std::shared_ptr<ORBFeature> orb_feature_ptr = std::make_shared<ORBFeature>(image_path, config_path);std::vector<cv::KeyPoint> vKeypoints;  // 用于存储提取出的关键点cv::Mat descriptor;  // 用于存储关键点对应的描述子// 提取ORB特征orb_feature_ptr->ExtractORB(vKeypoints, descriptor);// 读入图像文件cv::Mat image = cv::imread(image_path, cv::IMREAD_GRAYSCALE);// 将关键点的数量和描述子的数量输出到日志LOG(INFO) << "vKeypoints size " << vKeypoints.size();LOG(INFO) << "descriptor size " << descriptor.rows;cv::Mat outImage;// 在图像中绘制关键点cv::drawKeypoints(image, vKeypoints, outImage, cv::Scalar::all(-1), cv::DrawMatchesFlags::DEFAULT);// 显示包含关键点的图像cv::imshow("这是ORB-SLAM2提取的特征点", outImage);// 提取ORB特征(这行代码可能是重复了,或者是预留的,下面没有给出输入参数)orb_feature_ptr->ExtractORB();// 等待用户输入cv::waitKey();return 0;
}

std::shared_ptr<ORBFeature> orb_feature_ptr =std::make_shared<ORBFeature>(image_path, config_path);

    ORBFeature(image_path, config_path):这部分代码调用了ORBFeature的构造函数,并且传入image_pathconfig_path这两个参数。也就是说,它创建了一个ORBFeature的对象。

        调用 ORBFeature 类的构造函数,这个构造函数接收两个参数:image_pathconfig_path。这个调用会创建一个 ORBFeature 对象。                   std::make_shared<ORBFeature>std::make_shared是一个模板函数,它的作用是创建一个对象并返回一个指向该对象的shared_ptr智能指针。在这个例子中,std::make_shared<ORBFeature>(image_path, config_path)就是创建了一个ORBFeature对象,并返回一个std::shared_ptr<ORBFeature>类型的智能指针,这个智能指针指向新创建的ORBFeature对象。

        所以,std::make_shared<ORBFeature>(image_path, config_path)就是创建了一个ORBFeature对象,并用一个std::shared_ptr<ORBFeature>智能指针来管理它。这样做的好处是,你不需要手动管理这个ORBFeature对象的内存,当这个ORBFeature对象不再被使用时,shared_ptr会自动释放这个对象的内存。

    std::make_shared 是一个模板函数,它用于创建一个 std::shared_ptr 实例。这个函数需要一个类型参数(在尖括号 < > 中指定),以及一个用于构造该类型对象的参数列表(在圆括号 ( ) 中指定)。

    std::make_shared 会创建一个新的对象,并返回一个 std::shared_ptr,该指针指向新创建的对象。例如,std::make_shared<int>(42) 会创建一个新的 int 对象,其值为42,并返回一个指向该对象的 std::shared_ptr<int>

         例子中,std::make_shared<ORBFeature>(image_path, config_path) 会创建一个新的 ORBFeature 对象,使用 image_pathconfig_path 作为构造函数的参数,并返回一个指向该对象的 std::shared_ptr<ORBFeature>

        最后,将这个智能指针赋值给orb_feature_ptr。以后你可以通过orb_feature_ptr来使用这个ORBFeature对象。

   

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

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

相关文章

Zookeeper的基本概念以及安装

Zookeeper简介 Zookeeper是一个分布式的(多台机器同时干一件事情),开源的分布式应用程序协调服务,是Google公司Chubby产品,是Hadoop和Base重要的组件,.它是一个分布式应用程序提供一致性的服务的软件,提供的功能包括:配置服务,域名服务,分布式同步,组服务等 Zookeeper目…

SpringCloud使用log4j日志框架教程

前言 上一篇文章我们介绍了《SpringCloud使用logback日志框架教程》&#xff0c;本文我们再来介绍下log4j2。 Log4j2是一款流行的Java日志框架&#xff0c;它提供了高度可配置的日志记录功能&#xff0c;支持多种不同的输出格式和目标&#xff0c;比如文件、控制台、数据库等…

多肽试剂1801415-23-5,Satoreotide,UNII-S58172SSTS,应用在多肽标记及修饰上

资料编辑|陕西新研博美生物科技有限公司小编MISSwu​ Satoreotide&#xff0c;UNII-S58172SSTS Product structure Product specifications 1.CAS No&#xff1a;1801415-23-5 2.Molecular formula&#xff1a;C58H72ClN15O14S2 3.Molecular weight&#xff1a;1302.9 4.Packa…

手机word文档怎么转换成pdf?分享两种方法

手机word文档怎么转换成pdf&#xff1f;在如今信息化的时代&#xff0c;电子文档已经成为人们日常办公不可或缺的一部分。随着科技的不断进步&#xff0c;电子文档的格式也在不断发展。PDF作为电子文档的一种重要格式&#xff0c;被广泛使用。那么&#xff0c;如何将手机上的Wo…

一)Stable Diffusion使用教程:安装

目前AI绘画最火的当属Midjorney和Stable Diffusion&#xff0c;但是由于Midjourney没有开源&#xff0c;因此我们主要分享下Stable Diffusion&#xff0c;后面有望补上Midjourney教程。 本节主要讲解Stable Diffusion&#xff08;以下简述SD&#xff09;的下载和安装。 1&…

MyBatis学习笔记——2

MyBatis学习笔记——2 一、MyBatis核心配置文件详解1.1、environment&#xff08;环境&#xff09;1.2、transactionManager&#xff08;事务管理器&#xff09;1.3、dataSource&#xff08;数据源&#xff09;1.4、properties1.5、mapper 二、在WEB中应用MyBatis&#xff08;使…

[SQL挖掘机] - GROUP BY语句

介绍: group by 是 sql 中用于对结果集进行分组的关键字。通过使用 group by&#xff0c;可以根据一个或多个列的值将结果集中的行分组&#xff0c;并对每个分组应用某种聚合函数&#xff08;如 count、sum、avg 等&#xff09;以生成汇总信息。这样可以方便地对数据进行分类、…

xml命名空间

xml命名空间 一个xml文档中可以包含多个元素和属性&#xff0c;在文档中使用多个DTD文件时&#xff0c;可能会碰到相同的元素&#xff0c;而这些名称相同的元素可能代表了完全不同的含义&#xff0c;为了防止命名冲突&#xff0c;W3C提供了一个推荐标准-XML命名空间 命名空间有…

题目:2099.找出和最大的长度为 k 的子序列

​​题目来源&#xff1a; leetcode题目&#xff0c;网址&#xff1a;2099. 找到和最大的长度为 K 的子序列 - 力扣&#xff08;LeetCode&#xff09; 解题思路&#xff1a; 首先新建一个 nums.length 维数据&#xff0c;每一维的长度为 2&#xff0c;然后将 nums 数组中元素放…

轮播图添加删除

轮播图页面和对话框搭建 页面简单布局 <template><div id"banner"><el-space direction"vertical" :size"20" style"width: 100%"><h1>轮播图管理</h1><div style"text-align: right"&g…

商城-学习整理-基础-分布式组件(三)

目录 一、前言二、Spring Cloud&Spring Cloud Alibaba1、Spring Cloud 与Spring Cloud Alibaba简介2、为什么使用Spring Cloud Alibaba3、版本选择4、项目中的依赖 三、Spring Cloud Alibaba-Nacos作为注册中心1、Nacos1&#xff09;、下载 nacos-server2&#xff09;、启动…

golang log标准库

不喜饶过 源码部分 type Logger struct {mu sync.Mutex // ensures atomic writes; protects the following fieldsprefix string // prefix on each line to identify the logger (but see Lmsgprefix)flag int // propertiesout io.Wri…

29-使用RocketMQ做削峰处理

1、初识RocketMQ 1.1、Apache 下载RocketMQ https://downloads.apache.org/rocketmq/ 1.2、RocketMQ官方网站 https://rocketmq.apache.org/zh/ 1.3、RocketMQ在GitHub文档 https://github.com/alibaba/spring-cloud-alibaba/wiki/RocketMQ 1.4、RocketMQ官方网站文档 …

ZGC垃圾收集器-JVM(十五)

上篇文章说了G1的特性&#xff0c;无分代&#xff0c;复制算法&#xff0c;大内存就可以用G1&#xff0c;可预测stw时间等特性。 G1垃圾收集分类-JVM&#xff08;十四&#xff09; ZGC收集器 -XX:UseZGC ZGC&#xff08;Z Garbage Collector&#xff09;是在jdk11新加入的低…

42. 接雨水

42.接雨水 这是一个简单的动态规划问题&#xff0c;虽然leetcode将它归结为困难。 但是我感觉它难度应该达不到&#xff0c;可能归结为中等比较合适0x1 题目 给定 n 个非负整数表示每个宽度为 1 的柱子的高度图&#xff0c;计算按此排列的柱子&#xff0c;下雨之后能接多少雨…

迁移学习的使用

network resnet34(pretrainedTrue) self.x nn.Sequential(*list(network.children())[4:5]) for name, layer in self.x.named_children(): layer[0].conv1nn.Conv2d(64, 128, kernel_size3, stride 2, padding 1, biasFalse) # 获取模型的参数字典network.conv1 nn.Conv2d(…

python flask 返回中文乱码

使用flask返回数据中带有中文的时候会显示成乱码(ascii)&#xff0c; 中文报文&#xff1a; ABAP中的三大财务报表是&#xff1a;* **资产负债表** * **收入证明** * **现金流量表**这些报表全面概述了公司的财务状况和业绩。* **资产负债表**显示公司在特定时间点的资产、负…

【Python数据分析】Python基础知识篇

&#x1f389;欢迎来到Python专栏~Python基础知识篇 ☆* o(≧▽≦)o *☆嗨~我是小夏与酒&#x1f379; ✨博客主页&#xff1a;小夏与酒的博客 &#x1f388;该系列文章专栏&#xff1a;Python学习专栏 文章作者技术和水平有限&#xff0c;如果文中出现错误&#xff0c;希望大…

LeetCode[1508]子数组和排序后的区间和

难度&#xff1a;Medium 题目&#xff1a; 给你一个数组 nums &#xff0c;它包含 n 个正整数。你需要计算所有非空连续子数组的和&#xff0c;并将它们按升序排序&#xff0c;得到一个新的包含 n * (n 1) / 2 个数字的数组。 请你返回在新数组中下标为 left 到 right &#…

将请求参数数据推送至RabbitMQ队列中并且捕捉消息没有到达交换机的异常

1&#xff1a;自定义mq信息类&#xff08;我的交换这些信息都从nacos上直接取的&#xff0c;怎么从nacos取配置信息看上篇文章&#xff09;&#xff1a; import lombok.AllArgsConstructor; import lombok.Builder; import lombok.Data; import lombok.NoArgsConstructor;impo…