运动中恢复结构(SFM)可以用来重建目标的稀疏点云并为后续的稠密重建提供相对精度更高的种子点,也可以用于里程计等估计相机本身的位姿。同样,除了采用结构光进行三维重建外,还用到了OpenMVG + C/PMVS和COLMAP。在浏览OpenCV contrib模块时发现OpenCV也可实现MVG,高低得编译学习一下。同样,这里分为Ubuntu下的和windows下的编译及测试。
1. Ubuntu下编译带有SFM的OpenCV库
1.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’
这是因为使用了C++14标准。为了避免基于OpenCV库的开发出现其他问题,这里降低Ceres至2.0以下,但是编译后又出现了:
variable or field ‘it’ declared void
这是因为eigen版本过高了,再次将版本将至3.3以下,编译通过。
1.2 OpenCV的编译。
上一步的库已经被安装到Ubuntu的环境中,如果已经是编译过的OpenCV库,编译OpenCV只需要打开VIZ(VTK)编译即可。