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

OpenCV中的模块:三维重建-SFM(1)

        在三维重建中,运动中恢复结构(SFM)可以用来重建目标的稀疏点云并为后续的稠密重建提供相对精度更高的种子点。笔者在三维重建的相关工作中除了采用结构光(线激光和条纹光等)外,还使用过OpenMVG + C/PMVS和COLMAP等。在浏览OpenCV contrib模块时发现OpenCV也可实现SFM,基于兴趣这里也编译学习了一下。同样,笔者会在Ubuntu下和windows下分别编译及测试,但是由于篇幅问题,windows下的编译将在下一篇讲解。

1. 依赖库的安装  

        Ubuntu下的编译相对简单,主要是一些依赖库的安装,尤其是注意Ceres的安装。如果不安装Ceres,则重建功能将被禁用。

#安装依赖库

sudo apt-get install libgoogle-glog-dev

sudo apt-get install libatlas-base-dev

sudo apt-get install libeigen3-dev

sudo apt-get install libsuitesparse-dev
 

#编译、测试及安装Ceres

git clone https://github.com/ceres-solver/ceres-solver.git

cd ceres-solver

mkdir build && cd build

cmake ..

make -j4

make test

sudo make install

如果按照上述命令行,可能报错:

error: ‘integer_sequence’ is not a member of ‘std’

 这是因为最新版的ceres使用了C++14标准,需要在上述步骤中CMake中修改C++编译标准。

cmake -DCMAKE_CXX_STANDARD=14 ..

       当然,也可以回退版本:至少需要将ceres回退2.0以下,Eigen回退到3.3以下,此外,还可能需要回退其他库。

2. OpenCV的编译。

        注意:上一步的库已经被安装到Ubuntu的环境中,在编译OpenCV库时注意查看viz和sfm是否打开,或者直接打开。

cmake -DWITH_VTK=ON -DBUILD_opencv_sfm=ON ..

然后 make --> sudo make install 即可。如果没有将相关依赖安装到ubu

相关文章:

  • 设计模式 --5观察者模式
  • 威胁建模与网络安全测试方法
  • Android adb 常用命令
  • mysql的一些基本操作
  • Oracle 使用维进行查询重写
  • Flutter Don‘t use ‘BuildContext‘s across async gaps.
  • Jmeter各组件超详细介绍
  • Git命令(1)[删除,恢复与移动]
  • Stable Diffusion WebUI 图片信息(PNG Info)
  • H5面临的网络安全威胁和防范措施
  • 机器学习KNN最邻近分类算法
  • Taro + vue3 小程序封装标题组件
  • 开源代码分享(17)-基于足球队训练算法(Football Team Training Algorithm,FTTA)的组合风速预测
  • css预编译sass,css也可以变得优雅
  • Audition 2024:声音的魔术师,赋予音频无限魅力mac/win版
  • [ 一起学React系列 -- 8 ] React中的文件上传
  • 【Amaple教程】5. 插件
  • Cookie 在前端中的实践
  • iOS | NSProxy
  • sessionStorage和localStorage
  • vue-cli在webpack的配置文件探究
  • 初识 webpack
  • 从零开始的无人驾驶 1
  • 关于使用markdown的方法(引自CSDN教程)
  • 精彩代码 vue.js
  • 前端每日实战 2018 年 7 月份项目汇总(共 29 个项目)
  • 前端学习笔记之原型——一张图说明`prototype`和`__proto__`的区别
  • 浅谈Kotlin实战篇之自定义View图片圆角简单应用(一)
  • 巧用 TypeScript (一)
  • 十年未变!安全,谁之责?(下)
  • 跳前端坑前,先看看这个!!
  • 协程
  • ​RecSys 2022 | 面向人岗匹配的双向选择偏好建模
  • #HarmonyOS:Web组件的使用
  • #include<初见C语言之指针(5)>
  • #我与Java虚拟机的故事#连载05:Java虚拟机的修炼之道
  • $emit传递多个参数_PPC和MIPS指令集下二进制代码中函数参数个数的识别方法
  • (3)(3.2) MAVLink2数据包签名(安全)
  • (DenseNet)Densely Connected Convolutional Networks--Gao Huang
  • (Spark3.2.0)Spark SQL 初探: 使用大数据分析2000万KF数据
  • (ZT)北大教授朱青生给学生的一封信:大学,更是一个科学的保证
  • (八)c52学习之旅-中断实验
  • (力扣)循环队列的实现与详解(C语言)
  • (三分钟)速览传统边缘检测算子
  • (四)库存超卖案例实战——优化redis分布式锁
  • (一)Mocha源码阅读: 项目结构及命令行启动
  • **登录+JWT+异常处理+拦截器+ThreadLocal-开发思想与代码实现**
  • ../depcomp: line 571: exec: g++: not found
  • .【机器学习】隐马尔可夫模型(Hidden Markov Model,HMM)
  • .NET 4 并行(多核)“.NET研究”编程系列之二 从Task开始
  • .NET Framework Client Profile - a Subset of the .NET Framework Redistribution
  • .NET 依赖注入和配置系统
  • .NET/C# 编译期间能确定的相同字符串,在运行期间是相同的实例
  • .NET单元测试
  • .NET企业级应用架构设计系列之开场白