由于最近要在 OpenCV3 中使用 SIFT 和 SURF 特征提取, 而自从 OpenCV2 升级到 OpenCV3 版本后, SIFT,SURF 等这些算法都被移出 opencv 默认项目库, 而被放到叫 opencv_contrib 的项目库. 因此需要手动下载 opencv 和 opencv_contrib 的源码, 然后将两个源码放在一起手动编译安装.
由于我的电脑是 VMware 虚拟机跑的 ubuntu18.04, 并且 ubuntu18.04 中安装了 ROS-melodic, 而 ROS-melodic 装完后默认就把 opencv-3.2.0 版本顺带安装好了. 所以, 为了与 ROS-melodic 里面自带的 opencv-3.2.0 版本保持一致, 我是下载了 opencv-3.2.0 和 opencv_contrib-3.2.0 源码, 手动编译与安装, 来覆盖 ROS-melodic 里面自带的 opencv-3.2.0 版本. 下面我列出了我的环境:
VMware 虚拟机
- ubuntu18.04
- opencv-3.2.0
- opencv_contrib-3.2.0
1. 下载 opencv-3.2.0 和 opencv_contrib-3.2.0 源码
去 GitHub 下载就行了, 下载地址如下:
opencv-3.2.0 下载地址: https://github.com/opencv/opencv/tree/3.2.0
opencv_contrib-3.2.0 下载地址: https://github.com/opencv/opencv_contrib/tree/3.2.0 https://github.com/opencv/opencv/tree/3.2.0
下载好后将这两个文件同时解压到同个文件夹下, 我是解压在 opencv_install 这样一个文件夹, 如下图所示.
2. 安装相关依赖
在编译和安装 opencv 源码之前, 需要先安装相关依赖库, 安装命令如下:
- sudo apt-get install build-essential
- sudo apt-get install cmake Git libgtk2.0-dev pkg-config libavcodec-dev 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
上面命令执行会报错, 错误说 libjaster-dev 无法安装, 解决办法如下:
- sudo add-apt-repository "deb http://security.ubuntu.com/ubuntu xenial-security main"
- sudo apt update
- sudo apt install libjasper1 libjasper-dev
3. 用 cmake-gui 工具配置 opencv 编译参数
(1) 安装 cmake-gui 工具
在正式编译 opencv 源码之前, 需要对 opencv 中的 CMake 参数做设置, 推荐用 cmake-gui 工具配置. 先安装 cmake-gui 工具, 如下命令:
sudo apt-get install cmake-gui
(2) 设置 cmake 参数
打开终端, 输入下面的命令, 启动 cmake-gui 工具:
cmake-gui
在打开的界面中, 将 where is the source code 栏中设成 opencv-3.2.0 的路径, 将 where to build the binaries 栏中设成 opencv-3.2.0/build 的路径, 如下图所示.
然后点击 Configure 按钮, 进行配置. 配置过程会报错误, 错误说缺 vgg_generated_48.i 之类的, 解决办法是直接去网上下载 vgg_generated_48.i 这个文件, 下载地址如下:
下载好 vgg_generated_48.i 后, 将这个文件复制到报错中提示的路径下就行了. 以我的路径为例, 用下面的命令复制:
cp vgg_generated_48.i /home/ubuntu1804/Downloads/opencv_install/opencv_contrib-3.2.0/modules/xfeatures2d/cmake/.download/e8d0dcd54d1bcfdc29203d011a797179/vgg_generated_48.i
上面命令中路径里面的 e8d0dcd54d1bcfdc29203d011a797179 根据你实际报错提示为准, 类似的缺这些文件的错误, 去网上下对应的文件, 同样的方法解决就行了.
补齐了这些文件后, 然后再次点击 Configure 按钮, 进行配置, 应该就能正常配置了.
(3) 设置 cmake 编译参数
在界面中将一下几个参数的取值设置好, 具体参数和取值如下所示:
CMAKE_BUILD_TYPE 参数取值 Release, 如下图所示.
OPENCV_EXTRA_MODULES_PATH 参数取值 / home/ubuntu1804/Downloads/opencv_contrib-3.2.0/modules, 这个路径的前面几个文件夹用你的实际路径替代, 如下图所示.
CMAKE_INSTALL_PREFIX 参数取值 / usr/local, 如下图所示.
这里需要特别提一下, 还需要将 ENABLE_PRECOMPILED_HEADERS 参数取值设成 OFF. 如果不关闭这个参数的话, 后面编译会报错误 / usr/include/c++/7/cstdlib:75:15:fatal error:stdlib.h:No such file or direct.
上面这些编译参数都设置好后, 就可以点击 Generate 按钮, 生成 makefile 文件.
4. 编译和安装 opencv
切换到 opencv-3.2.0/build 目录, 用 make 和 make install 编译和安装就行了.
- cd ~/Downloads/opencv_install/opencv-3.2.0/build/
- make
- sudo make install
当你执行完上面命令的时候, 并看到 100% 的时候, 恭喜你! 安装成功!
来源: https://www.cnblogs.com/hiram-zhang/p/12013858.html