【DLoopDetector(C++)】DBow2词袋模型loop close学习
0.前言
最近读了两篇论文,论文作者开源了一种基于词袋模型DBoW2库的DLoopDetector算法,自己运行demo测试一下
对应论文介绍:Bags of Binary Words for Fast Place Recognition in Image Sequences
开源项目Github地址:https://github.com/dorian3d/DLoopDetector
测试系统为Ubuntu18.04,OpenCV 3.2.0
1.编译项目
编译过程中还是遇到了一些小问题的,主要是在cmakelists.txt上
根据Github上的介绍,要提前安装依赖:
$ sudo apt-get install libboost-dev
将源码文件下载到本地根目录,我这里下载的是release版本中的v1.1-free,解压缩后只保留前面项目的名字即可
进入文件夹中找到CMakelists.txt,打开后发现从第32行开始可以看出,作者的意图是不需要提前安装DBoW2和DLib两个库,在build MakeFile文件时会自动安装编译,那这里就不需要提前安装了
第62行进入了一个if判断,说明要编译的是Demobrief.cpp
# 第62行add_executable(demo_brief demo/demo_brief.cpp)target_link_libraries(demo_brief ${OpenCV_LIBS} ${DLib_LIBS} ${DBoW2_LIBS})
所以回到第5行,将后面的OFF切换成ON
option(BUILD_DemoBRIEF "Build demo application with BRIEF features" ON)
CMakelists.txt文件中大概就是这样子,保存后回到项目文件夹打开终端:
$ mkdir build
$ cd build/
$ cmake ..
结束后终端会弹出这两句,说明你之前电脑中确实没有安装过:
DLib library not found in the system, it will be downloaded on build
DBoW2 library not found in the system, it will be downloaded on build
如果你像我一样提前安装了,可以卸载掉,毕竟这两个库我平时不用
卸载方法:去usr/local/include 和 usr/local/lib 中找到相关文件rm -rf,还要去usr/local/lib/cmake下去删除config.cmake配置文件,否则find_package会得到一个空文件一直报错
得到MakeFile文件后进行make编译:
$ make
我遇见的问题是这样的:

通过查看爆红提示可以看到是编译cpp文件的时候找不到DBoW2.h这个头文件,我们先去项目中找一下DBoW2词袋库是否安装成功了,通过locate查找发现在这个路径下是有的:/DLoopDetector/build/dependencies/install/include/DBoW2
以防万一还是要看一下config.cmake中有没有问题
$ cd DLoopDetector/build/dependencies/install/lib/cmake/DBoW2
$ gedit DBoW2Config.cmake
查看一下找的路径,确实没问题,头文件和库文件都存在的

最后没找到什么好办法,于是我想到是不是顺序有问题,于是重新:
$ cmake ..
$ make
竟然成功了…,build文件夹下出现了demo_brief可执行程序
运行缺少resources数据,看到也有人遇到了这个问题:https://github.com/dorian3d/DLoopDetector/issues/14
下载链接:https://drive.google.com/uc?export=download&id=1MpZwPjXDAUxKfSTpeCjG0PAUpaeWuo7D
下载好后直接放到build下面,与demo_brief同一个位置,运行!

相关文章:
【DLoopDetector(C++)】DBow2词袋模型loop close学习
0.前言 最近读了两篇论文,论文作者开源了一种基于词袋模型DBoW2库的DLoopDetector算法,自己运行demo测试一下 对应论文介绍:Bags of Binary Words for Fast Place Recognition in Image Sequences 开源项目Github地址:https://gi…...
什么是CAS机制?
CAS和Synchronized的区别是什么?适合什么样的场景?有什么样的优点和缺点? 示例程序:启动两个线程,每个线程中让静态变量count循环累加100次。 public class ThreadTest {private static int count 0;public static …...
Java多态详解
下面讲解一下Java中的多态机制,力求用最通俗易懂的语言,最精炼的话语,最生动的例子,深入浅出Java多态,帮助读者轻松掌握这个知识点。 什么是多态? 多态是指同一种行为具有多个不同表现形式的能力。 多态…...
Android中简单实现Spinner的数据绑定
Android中简单实现Spinner的数据绑定 然后声明对象实例并加入到arraylist里面,并设置spinner的适配器 Spinner Sp (Spinner).............// List<CItem > lst new ArrayList<CItem>(); CItem ct new CItem ("1","测试"); lst.Add(ct)…...
【版本控制工具二】Git 和 Gitee 建立联系
文章目录 前言一、Git 和 Gitee 建立联系1.1 任意目录下,打开 git bash 命令行,输入以下命令生成公钥1.2 配置SSH公钥1.3 进行全局配置 二、其它相关Git指令2.1 常用指令2.2 指令操作可能出现的问题 三、补充3.1 **为什么要先commit,然后pull…...
最新AI智能创作系统ChatGPT商业源码+详细图文搭建部署教程+AI绘画系统
一、AI系统介绍 SparkAi创作系统是基于国外很火的ChatGPT进行开发的Ai智能问答系统。本期针对源码系统整体测试下来非常完美,可以说SparkAi是目前国内一款的ChatGPT对接OpenAI软件系统。那么如何搭建部署AI创作ChatGPT?小编这里写一个详细图文教程吧&am…...
【算法与数据结构】--目录
第一部分:算法基础 第一章:算法入门第二章:数据结构概述第三章:算法设计与分析 3.1 贪心算法3.2 动态规划3.3 分治算法3.4 回溯算法 第二部分:常见数据结构 第四章:数组和链表 4.1 数组4.2 链表4.3 比较…...
爱普生LQ1900KIIH复位方法
爱普生EPSON 1900KIIH是一部通用针式打印机,136列(10cpi下)的打印宽度,缓冲区128KB,打印速度为270字/秒。 打印机类型 打印方式:24针击打式点阵打印、打印方向:双向逻辑查找、安全规格标准&am…...
字段位置顺序对值的影响
Unity中验证AB加载场景时报错: Cannot load scene: Invalid scene name (empty string) and invalid build index -1 报错原因是因为把字段放在了Start函数后面(图一)改成(图二)就好了。图一中协程使用的sceneBName字段值为null。 图一: 图二:…...
pytorch_神经网络构建2(数学原理)
文章目录 深层神经网络多分类深层网络反向传播算法优化算法动量算法Adam 算法 深层神经网络 分类基础理论: 交叉熵是信息论中用来衡量两个分布相似性的一种量化方式 之前讲述二分类的loss函数时我们使用公式-(y*log(y_)(1-y)*log(1-y_)进行误差计算 y表示真实值,y_表示预测值 …...
Oracle SQL Developer 中查看表的数据和字段属性、录入数据
在Oracle SQL Developer中,选中一个表时,右侧会列出表的情况;第一个tab是字段的名称、数据类型等属性; 切换到第二个tab,显示表的数据; 这和sql server management studio不一样的; 看一下部门…...
java docker图片叠加水印中文乱码
java docker图片叠加水印中文乱码 技术交流博客 http://idea.coderyj.com/ 1.由于项目需要后端需要叠加图片水印,但是中文乱码,导致叠加了之后 中文是框框 2.经过多方查找基本都说在 linux下安装字体就解决了,但是尝试了均无效 3.后来忽然想到我的项目是用docker打包部署的,不…...
string类的使用方式的介绍
目录 前言 1.什么是STL 2. STL的版本 3. STL的六大组件 4.STL的缺陷 5.string 5.1 为什么学习string类? 5.1.1 C语言中的字符串 5.2 标准库中的string类 5.3 string类的常用接口的使用 5.3.1 构造函数 5.3.2 string类对象的容量操作 5.3.3 string类对象…...
FFmpeg 命令:从入门到精通 | 命令行环境搭建
FFmpeg 命令:从入门到精通 | 命令行环境搭建 FFmpeg 命令:从入门到精通 | 命令行环境搭建安装 FFmpeg验证 FFmpeg 是否安装成功 FFmpeg 命令:从入门到精通 | 命令行环境搭建 安装 FFmpeg 进入 FFmpeg 官网: 点击 Download&#…...
《从零开始学ARM》勘误
1. 50页 2 51页 3 236页 14.2.3 mkU-Boot 修改为: mkuboot 4 56页 修改为: 位[31:24]为条件标志位域,用f表示; 位[23:16]为状态位域,用s表示; 位[15:8]为扩展位域&…...
10款录屏软分析与选择使用,只看这篇文章就轻松搞定所有,高清4K无水印录屏,博主UP主轻松选择
录屏软件整理 如下为录屏软件,通过思维导图展示分析介绍: https://www.drawon.cn/template/details/6522bd5e0dad9029a0b528e1 如下为整理的录屏软件列表 名称产地价格支持的平台下载地址说明OBS国外免费开源windows/linux/machttps://obsproject.co…...
android: android:onClick=“@{() -> listener.onItemClick(viewModel)}“
一、前言:在我使用editTest控件的时候,它的下方有一条横线。我想把它去掉然后我在布局文件中这样写 android:background"null" 导致报错,报错信息是: android:onClick"{() -> listener.onItemClick(viewModel)…...
温故知新:dfs模板-843. n-皇后问题
n−n−皇后问题是指将 nn 个皇后放在 nnnn 的国际象棋棋盘上,使得皇后不能相互攻击到,即任意两个皇后都不能处于同一行、同一列或同一斜线上。 现在给定整数 nn,请你输出所有的满足条件的棋子摆法。 输入格式 共一行,包含整数 n…...
刷题笔记28——一直分不清的Kruskal、Prim、Dijkstra算法
图算法刷到这块,感觉像是走了一段黑路快回到家一样,看到这三个一直分不太清总是记混的名字,我满脑子想起的是大学数据结构课我坐在第一排,看着我班导一脸无奈,心想该怎么把这个知识点灌进木头脑袋里边呢。有很多算法我…...
Mysql时间同步设置
Mysql时间同步设置 当涉及到设置MySQL数据库时间与电脑同步时,实际的步骤可能会因操作系统和数据库版本的不同而有所差异。以下是一个基本的步骤示例,供您参考: 检查电脑时间: 首先确保电脑操作系统的时间是正确的。 设置MySQL时…...
H3C F1070防火墙console密码恢复实战指南
1. 当console密码成为拦路虎时 刚接手公司网络设备那会儿,我就被H3C F1070防火墙来了个下马威。那天机房搬迁后需要调试设备,结果发现前任管理员留下的console密码早已失效。这种场景就像你拿着钥匙回老家,却发现锁芯被换了一样尴尬。作为网络…...
掌握MediaPipeUnityPlugin:从0到1的面部表情捕捉实践指南
掌握MediaPipeUnityPlugin:从0到1的面部表情捕捉实践指南 【免费下载链接】MediaPipeUnityPlugin Unity plugin to run MediaPipe 项目地址: https://gitcode.com/gh_mirrors/me/MediaPipeUnityPlugin 在Unity开发中,实现高精度面部表情捕捉常面临…...
暗黑破坏神2终极单机优化:PlugY生存工具包完整指南
暗黑破坏神2终极单机优化:PlugY生存工具包完整指南 【免费下载链接】PlugY PlugY, The Survival Kit - Plug-in for Diablo II Lord of Destruction 项目地址: https://gitcode.com/gh_mirrors/pl/PlugY 厌倦了暗黑破坏神2单机模式的储物空间限制?…...
Java函数冷启动优化不是“选配”,而是SLA硬指标!一线大厂SRE团队正在紧急落地的6项Kubernetes调度增强策略
第一章:Java函数冷启动的本质与SLA倒逼机制Java函数冷启动并非单纯“首次加载慢”的表象,而是JVM生命周期、类加载机制、字节码验证、即时编译(JIT)预热及运行时元数据初始化等多层系统行为在无预热上下文下的集中爆发。当Serverl…...
Qwen3-0.6B-FP8实战案例:为嵌入式系统开发提供代码生成与调试建议
Qwen3-0.6B-FP8实战案例:为嵌入式系统开发提供代码生成与调试建议 最近在折腾一个STM32的小项目,想用PWM调个呼吸灯,结果对着手册和寄存器配置了半天,不是时钟没配对就是占空比算错,一编译还报了一堆警告。相信不少搞…...
不止于画图:用IPC-7351标准和Mentor LP工具高效生成标准PCB焊盘(Cadence实战)
从标准到实践:基于IPC-7351的PCB焊盘设计全流程解析 在高速数字电路和精密模拟电路设计中,焊盘作为元器件与PCB之间的物理连接点,其设计质量直接影响产品可靠性。一个常见的误区是仅关注软件操作技巧,而忽视行业标准对设计质量的…...
毕业季论文救星:深度解析百考通AI如何智能攻克文献综述与开题报告
又到一年毕业季,无数莘莘学子在为自己学术生涯的“终极答卷”——毕业论文而挑灯夜战。其中,文献综述的浩如烟海与开题报告的千头万绪,无疑是横亘在大多数同学面前的两座大山。你是否也曾面对海量文献不知如何筛选梳理?是否为构建…...
避开这些坑!算法工程师自学必备的5个高效学习法与工具推荐
避开这些坑!算法工程师自学必备的5个高效学习法与工具推荐 1. 为什么大多数自学算法工程师会失败? 在咖啡馆见到老张时,他正对着电脑屏幕上的LeetCode题目发呆。这位转行学习算法的前机械工程师已经坚持了8个月,但最近一次面试还是…...
小龙虾使用手册(蓝皮书)实战案例版
扫描下载文档详情页: https://www.didaidea.com/wenku/16656.html...
ThinkPad X1 Tablet Gen3 vs Gen2键盘对比:为何Gen3更适合改装Type-C?
ThinkPad X1 Tablet Gen3键盘Type-C改装全解析:为何它成为DIY玩家的终极选择? 在移动办公设备轻量化与模块化设计成为主流的今天,ThinkPad X1 Tablet系列凭借其独特的二合一形态和标志性键盘手感,始终保持着特殊地位。特别是第三代…...
