本篇仅用作个人在ubuntu18.04下配置opencv4.5.1时遇到的问题作记录。
在运行一个光流跟踪视频的程序时,需要使用opencv4以上的版本。由于本人之前跑orbslam系统时使用的opencv库为3.4.3,考虑到后续可能还需要使用该版本的库,便没有卸载该库。在安装新的opencv库时遇到了诸多困难,先对其作部分记录。
一、opecv_contrib库
第一次安装运行的时候没有安装contrib库,但是程序需要使用xfeature2d,该文件包含于opencv_contrib库中,该库叫做opencv贡献库,是opencv核心库(也就是我们安装的opencv的版本)的扩展,它包含了绝大多数用户生成的内容,同时也比核心库OpenCV拥有更完整的关于CV的算法应用。库中的模块与模块之间没有任何软件依赖。 每一个模块都要求自身具备文档说明、单元测试案例和样本代码,并且绝大多数模块通常还包含了模块教程。OpenCV核心库必须通过的测试,例如,每一个模块必须服从所有其他的格式、自动化软件构架测试、单元测试等等。opencv_contrib中的模块也必须通过这些测试。编译的时候,opencv_contrib库需要从OpenCV核心库中抽离出来,并独立编译。注意下载安装时版本保持与opencv核心库一致。核心库和contrib库下载链接如下:
https://github.com/opencv/opencv/releases/tag/4.5.1
https://github.com/opencv/opencv_contrib/releases/tag/4.5.1
二、安装和编译时遇到的问题
首先要将contrib文件夹移到opencv4.5.1里,随后进行编译安装。
问题1.ippicv
该文件在程序里是在线下载,由于速率太慢导致下载失败,因此需要手动下载该压缩文件,下载链接如下:
https://github.com/opencv/opencv_3rdparty/tree/ippicv/master_20180518/ippicv
该文件无需解压,为将其放在opencv-4.5.1文件夹下,在终端打开如下文件:
cd /opencv-4.5.1/3rdparty/ippicv
sudo gedit ippicv.cmake
将其中的下载链接注释掉,改为本地存放下载的压缩包的目录下,并且在上述name处修改为你下载的安装包的名字(我下载的并非链接这个版本,而是“ippicv_2020_lnx_intel64_general_20191018_general.tgz”,与压缩包命名一致即可)
问题2.face_landmark_model.dat缺失
与上述问题基本相同,也需要手动下载,下载链接在这。
下载好之后将其放入到扩展库的face文件夹里,本人路径如下:/home/lcy/opencv-4.5.1/opencv_contrib-4.5.1/modules/face,随后修改/modules/face/CMakeLists.txt里的下载路径:
问题3.各种i类文件的缺失
将其下载后放在opencv_contrib-4.5.1/modules/xfeatures2d/src/下即可,我上上述三个问题的文件放在如下网盘链接里,需要的兄弟自取。
链接: https://pan.baidu.com/s/1QkT1YA3XSs5pWthKZ_WqYA?pwd=jnan 提取码: jnan
问题4.编译的命令
sudo cmake -D CMAKE_BUILD_TYPE=Release -D OPENCV_GENERATE_PKGCONFIG=YES -D CMAKE_INSTALL_PREFIX=/usr/local/opencv4 -D BUILD_TESTS=OFF -D OPENCV_ENABLE_NONFREE=True -D WITH_IPP=OFF -D OPENCV_EXTRA_MODULES_PATH=../opencv_contrib-4.5.1/modules/ ..
本人经过多次调整,使用该语句进行编译(仅针对本人情况,大伙自行根据自己的强情况进行调整),OPENCV_GENERATE_PKGCONFIG=YES是因为opencv在版本4以上是不会自动生成配置文件,需要手动设置该参数为真,CMAKE_INSTALL_PREFIX设置安装路径,由于需要多版本复用,因此多设置了一个目录,关闭TEST是之前编译出错时遇到某问题的解决方法,-D WITH_IPP=OFF是关闭问题1的在线下载(这句不要也可以),最后一句是设置扩展库路径。
编译完成后按照正常的环境变量配置即可。
问题5.运行例程时报错
主要是找不到对应的opencv文件,因此对cmakelists语句进行修改:
set(OpenCV_DIR /usr/local/opencv4/lib/cmake/opencv4)
find_package(OpenCV 4 REQUIRED)
将其目录定位到对应的文件夹,find package时寻找版本4以上的即可。