话不多说,这一篇即是自己搭建 slam 程序遇到的第一个暗坑所做的总结; 做 slam 的第一步是从 IO 图片或者视频开始,我们很自然的要用到 OpenCV,但是如果 想要在 opencv 中使用 sift 算子,我们需要安装 extra_modules(Opencv_contrib)组件, 小 N: why? OptIT:因为 sift 和 surf 是需要专利付费的算法,专利权隶属于哥伦比亚大学,因此 opencv3 将一些不稳定的或需要专利付费的算法整理出了一个模块,所以如果工业界的同学们需要用 这两个算法的时候(居然不用 ORB?),要谨慎呀。
安装 Opencv 和 Opencv_contrib 的时候要注意版本匹配,下面给出网址大家可以从里面挑选 对应的版本: https://github.com/opencv 温馨提示:点击 opencv(or opencv_contrib)
点击 release,选择你想要的版本:
选择需要的版本和文件(ubuntu 下选择源码安装) 。
OpenCV contrib 组件的下载同样,二者版本要匹配! 切记不要直接在 opencv 界面上选择 Clone and download,版本会是最新版本,和 opencv_contrib 不匹配;
卸载 OpenCV
接下来我们进去 ubuntu;首先我们需要先卸载安装的 opencv 版本(也可以选择不卸载,这 里提供给大家卸载的方法,毕竟我还不清楚如何在 ubuntu 下实现 opencv 多版本共存):
1.完全卸载 opencv2
1.1.From repository,从软件仓库中安装的 opencv2 sudo apt-get purge libopencv* 1.2.From source,使用 cmake 自行编译安装的 opencv 你 首进入原先编译 opencv2 的 build 目录,在该目录下打开终端;再执行以下代码。 sudo make uninstall cd .. sudo rm -r build sudo rm -r /usr/local/include/opencv2 /usr/local/include/opencv /usr/include/opencv /usr/include/opencv2 /usr/local/share/opencv /usr/local/share/OpenCV /usr/share/opencv /usr/share/OpenCV /usr/local/bin/opencv* /usr/local/lib/libopencv* 这一步可能有 error,忽略之。最后执行如下操作: sudo apt-get -purge remove opencv-doc opencv-data python-opencv
对一些 error 可以无视,实现上述步骤,可进入/usr/local/include/下查看是否还是有 opencv 文档,如果没有,说明已经卸载成功; 安装 OpenCV 依赖项:
接下来我们安装 opencv 的依赖项;在 ubuntu 下的好处就是对于任何操作几行指令就可以完 成,非常方便:
sudo apt-get install build-essential sudo apt-get install cmake git libgtk2.0-dev pkg-config libavcodecdev libavformat-dev libswscale-dev sudo apt-get install python-dev python-numpy libtbb2 libtbb-dev libjpeg-dev libpng-dev libtiff-dev libjasper-dev libdc1394-22-dev sudo apt-get update 至此,依赖项安装完毕;
安装 OpenCV 以及 Opencv_contribe 组件
下面我们开始安装 opencv 以及 opencv_contrib 组件: 首先将二者解压,如果选择的是 zip 文档解压代码为 unzip opencv-3.4.1.zip unzip opencv_contrib-3.4.1.zip (OptiIT 选择的是 3.4.1 版本,各位解压时注意更换版本信息即可); 解压后将 opencv_contrib-3.4.1 移动道 opencv-3.4.1 文档目录下; 进入 opencv-3.4.1 文档,采用外部编译的方式,输入下列代码: mkdir build; cd build; 关键是 cmake 的代码,因为各位 ubuntu 的系统配置不尽相同,因此可以使用下列比较通用 的代码: cmake -D CMAKE_BUILD_TYPE=RELEASE \ -DCMAKE_INSTALL_PREFIX=/usr/local/ \ -DINSTALL_PYTHON_EXAMPLES=ON \
-DINSTALL_C_EXAMPLES=ON \ -DPYTHON_EXCUTABLE=/usr/bin/python \ -DOPENCV_EXTRA_MODULES_PATH=/home/lxy/opencv/opencv-3.4.1/opencv_contrib3.4.1/modules \ -DWITH_CUDA=OFF \ -DWITH_CUFFT=OFF \ -DWITH_CUBLAS=OFF \ -DWITH_TBB=ON \ -DWITH_V4L=ON \ -DWITH_QT=ON \ -DWITH_GTK=ON \ -DWITH_OPENGL=ON \ -DBUILD_EXAMPLES=ON ..
标红行意味着是各位需要根据自己的 opencv 解压后的文件目录以及 opencv_contrib 文 件目录(你已经把它移动道 opencv 目录下了)做更改; 注意最后两个点不能省略(懂的自然懂,不懂的记得 google 呦),如果某些文档没有安 装,可自己选择 on 或者 off 选项,此处也有人采用 cmake-gui 来设置,但是实现懒的学,就 先采用这种方式吧。
正常的话,即可进入编译,此时输入 make –j8 -j8 的意思是 8 核同时编译,也意味着 8 个进程同时编译(给非 IT 的我一点见识-、-) 这个时候就会遇到各种各样的问题了: 除了下面这个 blog http://www.cnblogs.com/klchang/p/7510526.html
可能遇到这种问题 问题 1
这个时候很简单,将 contrib/modules/中的相关 hpp 文件移动到/usr/local/include 下即可(花 了我 1-2 个小时才明白这个道理),如果没有 opencv2 建立对应的文件夹,记得在 /usr/local/include 目录下所有的操作都需要加 sudo 权限 如建立 opencv2 文件夹: sudo mkdir opencv2
如上述问题可采用
sudo cp –r <source-directory> <goal-directory> 相信这样的操作大家一定可以摸索成功 问题 2
linemod 问题,下面 github 上的一个哥们即把这个问题提出来,放在了网上,记得不需要加 cv:: 只需要把#include <opencv2/rgbd/linemod.hpp>加到报错的 hpp 中即可,如果出现 如问题 1 的 no such file or directory,采取问题 1 的解决方式即可。所以说,认真分析 bug 信息,坚持 google,我们会不断进步的(小 N:师兄加油!!! ) https://github.com/opencv/opencv/issues/10844
问题 3
如果出现关于 build opencv_contribute fatal error boostdesc_bgm.i and vgg; 这个问题遇到的时候极为难受,因为根本毫无头绪,然而总是由大神给出答案,可参考 opencv 网站上的 questions http://answers.opencv.org/question/174456/about-build-opencv_contribute-fatal-errorboostdesc_bgmi-and-vgg/ 我这里直接也提出解决方式:
图片中标蓝的网址为: https://github.com/opencv/opencv_3rdparty/branches/stale
这是遇到的所有问题,如果大家遇到了其他问题,欢迎一起讨论;
安装 Opencv 和 Opencv_contrib 的时候要注意版本匹配,下面给出网址大家可以从里面挑选 对应的版本: https://github.com/opencv 温馨提示:点击 opencv(or opencv_contrib)
点击 release,选择你想要的版本:
选择需要的版本和文件(ubuntu 下选择源码安装) 。
OpenCV contrib 组件的下载同样,二者版本要匹配! 切记不要直接在 opencv 界面上选择 Clone and download,版本会是最新版本,和 opencv_contrib 不匹配;
卸载 OpenCV
接下来我们进去 ubuntu;首先我们需要先卸载安装的 opencv 版本(也可以选择不卸载,这 里提供给大家卸载的方法,毕竟我还不清楚如何在 ubuntu 下实现 opencv 多版本共存):
1.完全卸载 opencv2
1.1.From repository,从软件仓库中安装的 opencv2 sudo apt-get purge libopencv* 1.2.From source,使用 cmake 自行编译安装的 opencv 你 首进入原先编译 opencv2 的 build 目录,在该目录下打开终端;再执行以下代码。 sudo make uninstall cd .. sudo rm -r build sudo rm -r /usr/local/include/opencv2 /usr/local/include/opencv /usr/include/opencv /usr/include/opencv2 /usr/local/share/opencv /usr/local/share/OpenCV /usr/share/opencv /usr/share/OpenCV /usr/local/bin/opencv* /usr/local/lib/libopencv* 这一步可能有 error,忽略之。最后执行如下操作: sudo apt-get -purge remove opencv-doc opencv-data python-opencv
对一些 error 可以无视,实现上述步骤,可进入/usr/local/include/下查看是否还是有 opencv 文档,如果没有,说明已经卸载成功; 安装 OpenCV 依赖项:
接下来我们安装 opencv 的依赖项;在 ubuntu 下的好处就是对于任何操作几行指令就可以完 成,非常方便:
sudo apt-get install build-essential sudo apt-get install cmake git libgtk2.0-dev pkg-config libavcodecdev libavformat-dev libswscale-dev sudo apt-get install python-dev python-numpy libtbb2 libtbb-dev libjpeg-dev libpng-dev libtiff-dev libjasper-dev libdc1394-22-dev sudo apt-get update 至此,依赖项安装完毕;
安装 OpenCV 以及 Opencv_contribe 组件
下面我们开始安装 opencv 以及 opencv_contrib 组件: 首先将二者解压,如果选择的是 zip 文档解压代码为 unzip opencv-3.4.1.zip unzip opencv_contrib-3.4.1.zip (OptiIT 选择的是 3.4.1 版本,各位解压时注意更换版本信息即可); 解压后将 opencv_contrib-3.4.1 移动道 opencv-3.4.1 文档目录下; 进入 opencv-3.4.1 文档,采用外部编译的方式,输入下列代码: mkdir build; cd build; 关键是 cmake 的代码,因为各位 ubuntu 的系统配置不尽相同,因此可以使用下列比较通用 的代码: cmake -D CMAKE_BUILD_TYPE=RELEASE \ -DCMAKE_INSTALL_PREFIX=/usr/local/ \ -DINSTALL_PYTHON_EXAMPLES=ON \
-DINSTALL_C_EXAMPLES=ON \ -DPYTHON_EXCUTABLE=/usr/bin/python \ -DOPENCV_EXTRA_MODULES_PATH=/home/lxy/opencv/opencv-3.4.1/opencv_contrib3.4.1/modules \ -DWITH_CUDA=OFF \ -DWITH_CUFFT=OFF \ -DWITH_CUBLAS=OFF \ -DWITH_TBB=ON \ -DWITH_V4L=ON \ -DWITH_QT=ON \ -DWITH_GTK=ON \ -DWITH_OPENGL=ON \ -DBUILD_EXAMPLES=ON ..
标红行意味着是各位需要根据自己的 opencv 解压后的文件目录以及 opencv_contrib 文 件目录(你已经把它移动道 opencv 目录下了)做更改; 注意最后两个点不能省略(懂的自然懂,不懂的记得 google 呦),如果某些文档没有安 装,可自己选择 on 或者 off 选项,此处也有人采用 cmake-gui 来设置,但是实现懒的学,就 先采用这种方式吧。
正常的话,即可进入编译,此时输入 make –j8 -j8 的意思是 8 核同时编译,也意味着 8 个进程同时编译(给非 IT 的我一点见识-、-) 这个时候就会遇到各种各样的问题了: 除了下面这个 blog http://www.cnblogs.com/klchang/p/7510526.html
可能遇到这种问题 问题 1
这个时候很简单,将 contrib/modules/中的相关 hpp 文件移动到/usr/local/include 下即可(花 了我 1-2 个小时才明白这个道理),如果没有 opencv2 建立对应的文件夹,记得在 /usr/local/include 目录下所有的操作都需要加 sudo 权限 如建立 opencv2 文件夹: sudo mkdir opencv2
如上述问题可采用
sudo cp –r <source-directory> <goal-directory> 相信这样的操作大家一定可以摸索成功 问题 2
linemod 问题,下面 github 上的一个哥们即把这个问题提出来,放在了网上,记得不需要加 cv:: 只需要把#include <opencv2/rgbd/linemod.hpp>加到报错的 hpp 中即可,如果出现 如问题 1 的 no such file or directory,采取问题 1 的解决方式即可。所以说,认真分析 bug 信息,坚持 google,我们会不断进步的(小 N:师兄加油!!! ) https://github.com/opencv/opencv/issues/10844
问题 3
如果出现关于 build opencv_contribute fatal error boostdesc_bgm.i and vgg; 这个问题遇到的时候极为难受,因为根本毫无头绪,然而总是由大神给出答案,可参考 opencv 网站上的 questions http://answers.opencv.org/question/174456/about-build-opencv_contribute-fatal-errorboostdesc_bgmi-and-vgg/ 我这里直接也提出解决方式:
图片中标蓝的网址为: https://github.com/opencv/opencv_3rdparty/branches/stale
这是遇到的所有问题,如果大家遇到了其他问题,欢迎一起讨论;