参考链接:还有关于cuda的方法,我没试.
原版本是3.1.0 因为想用opencv的legacy模块,所以安装了2.4.13.
1 查看当前版本opencv.
pkg-config --modversion opencv
原本的版本安装在 /usr/local/include/opencv和 /usr/local/include/opencv2
新的版本路径得更改:/usr/local/include/opencv2.4.13/include/opencv /usr/local/include/opencv2.4.13/include/opencv2
2 安装opencv2.4.13
下载官网opencv2.4.13的source源文件. 依赖项其实不用变了.
cd ....../opencv2.4.13
mkdir release
cd release
cmake -D CMAKE_BUILD_TYPE=RELEASE -D CMAKE_INSTALL_PREFIX=/usr/local/include/opencv2.4.13 ..
这个过程中报了关于cuda文件找不到的错误,我第一次编译opencv的时候还没装cuda 反正现在也基本用不上cuda 我就把CMakeLists.txt里所有关于cuda的文件都注释了.
make -j12
sudo make install -j12
3 配置Opencv的环境
这样opencv-2.4.13就被安装在了/usr/local/include/opencv2.4.13目录下.
接下来要对新安装的opencv-2.4.13进行配置,否则系统默认的还是opencv-3.1.0版本。
通过修改bashrc文件来设置PKG_ CONFIG_PATH
打开文件:
vi ~/.bashrc (ps:我还在vi /etc/profile vi /etc/bash.bashrc都写入了 但是source的时候不成功 所以反正没用吧 我也没删)
在文件的末尾加入:
export PKG_CONFIG_PATH=/usr/local/include/opencv2.4.13/lib/pkgconfig
export LD_LIBRARY_PATH= /usr/local/include/opencv2.4.13/lib
使用命令 esc从编辑模式进入命令模式 ZZ 保存并退出
然后在终端再输入:
source ~/.bashrc 保存
然后配置lib的路径:
cd /etc/ld.so.conf.d
touch opencv.conf
sudo vi opencv.conf
在opencv.conf里面写入:/usr/local/include/opencv2.4.13/lib
sudo ldconfig
这时候使用命令测试:
pkg-config --modversion opencv
pkg-config --cflags opencv
pkg-config --libs opencv
可以看到全都已经变成了opencv-2.4.13版本了。如果还想使用原来的opencv-3.1.0,只需要再修改PKG_CONFIG_PATH为opencv-2.4.8的pkgconfig路径即可。
4 暴力弱智解决问题
生气 完全搞不懂到底哪里出问题.
- 虽然已经将上述工作都完成了 但是在编译delaunay的时候明明代码是find(opencv 2.4.13)找的还是原来的3.1.0 在project前面加上#set(OpenCV_DIR "/usr/local/include/opencv2.4.13/share/OpenCV")也没有 再加上#set(OpenCV_LIBS "/usr/local/include/opencv2.4.13/lib")也没用 把OpenCV_DIR改成CMAKE啥啥也没用
- 然后又是一阵尝试 不知怎么回事代码上把鼠标移上去高亮的明明是2.4.13的新路径了 但还是会报错告知我没有legacy 这说明机器还是在老路径里面找 但是高亮又是怎么回事??计算机有毒? 上网搜索尝试无果后 第二天采取了弱智方法.
- 把原来的/usr/local里的opencv3.1.0的include lib share bin备份之后全部换成了opencv2.4.13 这样不管是系统路径还是opencv3.1.0的路径找到的都是2.4.13 唉 没有办法的办法了.
- 然后编译通过 orb dso stereo_dso delaunay 全部通过编译 运行delaunay 本来以为可以喘口气了 结果运行orb报错,注意这个错误将来dso也可能会有 到时候再调吧.报错:error while loading shared libraries3.1.0
- 刚开始不知道为什么 orb明明是支持2.4.13的 然后灵光一闪想通了 因为orb 系统编译的时候把DBoW什么的先互相连接了 所以才会说需要3.1.0 所以就上orb github主页 重新编译一遍就ok 了 也就是这几句
cd ORB_SLAM2
chmod +x build.sh
./build.sh
之前的报错包括一个undefined reference to symbol 'ZN2cv6String10deallocateEv' 忘了是什么时候的了 反正最后通过弱智方法解决了 但是看到一个链接解决方法写的还挺详细.