ubuntu18.04中安装opencv3.2
基本环境
ubuntu18.04
ros-melodic( 在安装完整版的时候,会将 opencv3.2安装到ubuntu的 /usr/lib 位置 )
需求分析
由于要在OpenCV3.2中使用SIFT和SURF特征提取,而自从OpenCV2升级到OpenCV3版本后,SIFT、SURF等这些算法都被移出opencv默认项目库,而被放到叫opencv_contrib的项目库。因此需要手动下载opencv和opencv_contrib的源码,然后将两个源码放在一起手动编译安装。
我们需要自定义安装opencv3.2 和 opencv_contrib3.2。
一、下载opencv3.2.0和opencv_contrib3.2.0
1、opencv下载 选择你要装的版本下载(选择source是通过浏览器下载,选择github可以通过命令行git clone下载)
2、opencv_contrib下载 在Tags里找到相应版本下载,注意版本要与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
配置我们使用cmake-gui
sudo apt install cmake-gui
二、安装前准备
我们将安装 opencv3.2到home目录 :
cd /home/cmx
解压opencv-3.2.0 和 opencv_contrib-3.2.0压缩包,分别产生opencv3.2.0 和 opencv_contrib3.2.0两个文件夹,将两个文件夹放到opencv_install文件夹下
在opencv3.2.0 下创建build文件夹
创建安装文件夹
mkdir opencv_install
cd opencv-install/opencv-3.2.0
mkdir build
mkdir -p ~/opencv_install/opencv/release
三、配置参数
直接在终端中输入cmake-gui,打开cmake图形配置界面
添加参数
where is the source code : /home/cmx/opencv_install/opencv-3.2.0
where to build the binary : /home/cmx/opencv_install/opencv-3.2.0/build
点击 Configure
然后在主界面会检测出需要配置的参数,在下面的调试界面会产生各种编译文件检查信息
四、解决问题
修改参数
参数名 参数值 原因
CMAKE_BUILD_TYPE Release 除非大神,不然你还想着调试官方的开源代码么
OPENCV_EXTRA_MODULES_PATH /home/cmx/opencv_install/opencv_contrib-3.2.0/modules 这就是SIFT和SURF特征提取算法所在的地方
CMAKE_INSTALL_PREFIX /home/cmx/opencv_install/opencv/release 这就是编译完成后安装的库文件和头文件的位置
ENABLE_PRECOMPILED_HEADERS OFF 如果不关闭这个参数的话,后面编译会报错误/usr/include/c++/7/cstdlib:75:15:fatal error:stdlib.h:No such file or direct.
OPENCV_ENABLE_NONFREE ON 使用各种算子都要引用nonfree.hpp头文件,并且3.2中已经废弃的legacy.hpp头文件,至于如何使用3.2中的特征提取方法大家就自己学习去吧
修复调试界面出现的各种问题
1)ippicv_linux_20151201.tgz文件无法下载,下载失败。
$ cd /home/hh/opencv/opencv-3.2/3rdparty/ippicv/downloads/linux-xxxxxxx/ippicv_linux_20151201.tgz
ippicv_linux_20151201.tgz,该文件大小为0kb
解决办法:
在Gitee上搜索ippicv,下载对应版本 (20151201) 的该文件,并将下载的文件替换原来0kb的文件就好。
2)boostdesc_bgm* 和 vgg_generated* 共11个文件(注意,我这里使用的*代表一个通配符),下载失败。包括boostdesc_bgm_bi.i、vgg_generated_48等文件,进入下面的文件夹之后你会发现一些以hash值命名的文件夹,其中虽然有你需要的文件,但是每个文件的大小都是0kb。
$ cd /home/hh/opencv/opencv_contrib-3.2/modules/xfeatures2d/cmake/.download 这是下载文件夹
$ cd /home/hh/opencv/opencv_contrib-3.2/modules/xfeatures2d/cmake/ 这是下载脚本所在的文件夹,在这里你会看到boostdesc和vgg下载脚本
解决办法:
在csdn中直接搜索文件名,开源大神都已上传(但是没VIP你估计拿不到);github官网;gitee官网都可以找到。
将download_boostdesc.cmake和download_vgg.cmake文件中最后几行的boostdesc_download和vgg_download注释掉,免的再次configure的时候又使用原下载链接再下载一遍,导致重新下载了一个0kb的错误文件。
然后将你下载好的文件boostdesc_bgm* 和 vgg_generated*放入以下路径
/home/cmx/opencv_install/opencv/opencv_contrib-3.2/modules/xfeatures2d/src
五、重新配置
点击Configure
点击Generate,生成makefile文件
六、编译安装
cd ~/opencv_isntall/opencv-3.2.0/build
make
make install
七、配置环境
1、配置方式1
在你的home目录中的 .profile 环境配置文件中添加以下内容,方便 编译程序 时查找库文件。
sudo gedit ~/.profile
在.profile文件下添加以下配置
export MY_OPENCV=/home/cmx/opencv_install/opencv/release
export CLASSPATH=${MY_OPENCV}/lib:$CLASSPATH
export PATH=${MY_OPENCV}/bin:$PATH
export PKG_CONFIG_PATH=$PKG_CONFIG_PATH:/home/cmx/opencv_install/opencv/release/lib/pkgconfig
source ~/.profile
在文件 /etc/ld.so.conf 中新开一行直接添加以下内容,方便 执行程序 执行时查找动态库文件。
sudo gedit /etc/ld.so.conf
添加以下配置
/home/cmx/opencv_install/opencv/release/lib
至此,你就可以在opencv3.2中使用各种特征提取算法了。
至于为什么要设置最后一个变量 PKG_CONFIG_PATH,是为了方便使用命令 pkg-config 获取opencv库而添加的。
2、配置方式2(未尝试)
sudo gedit /etc/ld.so.conf.d/opencv.conf
若找不到gedit命令则说明你之前没装,需要自己安装以下,打开一个终端,输入:
sudo apt install gedit
然后在打开文件中添加如下内容:
/home/cmx/opencv_install/opencv/release/lib
之后再终端输入以下命令(安装完成某个工程后生成许多动态库,该命令是为了让这些动态链接库为系统所共享)
sudo ldconfig
使其保存并生效。
再在终端输入
sudo gedit /etc/bash.bashrc
打开文件后在末尾输入:
PKG_CONFIG_PATH=$PKG_CONFIG_PATH:/home/cmx/opencv_install/opencv/release/lib/pkgconfig
export PKG_CONFIG_PATH
保存退出,终端输入:
source /etc/bash.bashrc
至此,opencv及opencv_contrib安装配置完成了!
八、功能包中配置路径
我在find_object_2d中需要使用sift算子,但运行后还是无法使用,无奈只能修改CMakeLists.txt文件,指定新安装好的opencv路径
添加一行设置指定opencv路径
set(OpenCV_DIR /home/cmx/opencv_install/opencv/release/share/OpenCV)
参考博客1:https://blog.csdn.net/cyfzwj/article/details/111991295
参考博客2:https://blog.csdn.net/weixin_47266712/article/details/125409787