视觉学习笔记10——opencv的卸载、安装与多版本管理

系列文章目录

参考文献
参考文献
参考文献
参考文献



前言

之前在ubuntu18系统上已经安装了opencv4.4.0和扩展库opencv_contrib,但是最近需要跑一个SLAM的源代码,而这个SLAM系统是基于opencv3.4.2开发的,直接运行会出现很多opencv版本不兼容的问题。因此想再安装opencv3.4.2和扩展库opencv_contrib3.4.2,过程中出现了很多问题,写这篇文章记录一下。


一、opencv卸载

卸载原有Opencv
在ubuntu终端命令行输入以下命令进入安装opencv的build目录并进行卸载操作。

cd build
sudo make uninstall
cd  .. 
sudo rm -r build

最后在输入以下命令清理/usr中所有opencv相关项即可。(此步骤可不需要)

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*

二、opencv安装

1、下载opencv

以opencv3.4.2为例,进入官网和github分别下载Opencv3.4.2 Sourcesopenc_contrib,注意两者的版本一定是对应的,最后将contrib压缩包解压后放进之前解压好的Opencv Sources的文件夹下。

在这里提前打个补丁,因为在后面编译OpenCV 以及 openc_contrib 时很容易出现提示:缺少boostdesc_bgm.i文件出错。可能是因为墙的问题,有一些文件下载不全

总共缺了以下几个文件:

boostdesc_bgm.i
boostdesc_bgm_bi.i
boostdesc_bgm_hd.i
boostdesc_lbgm.i
boostdesc_binboost_064.i
boostdesc_binboost_128.i
boostdesc_binboost_256.i
vgg_generated_120.i
vgg_generated_64.i
vgg_generated_80.i
vgg_generated_48.i

所以需要手动打补丁。

这里感谢这位博主贡献的资源,自行下载。

https://blog.csdn.net/AlexWang30/article/details/99612188

下载的补丁解压到对应的opencv-3.4.2/opencv_contrib-3.4.2/modules/xfeatures2d/boostdesc_vgg_11/目录下,并更改opencv-3.4.2/opencv_contrib-3.4.2/modules/xfeatures2d/cmake下的两个文件,修改它的下载路径,指向本地。
在这里插入图片描述
在这里插入图片描述

2、cmake-gui编译

官网下载cmake(我用的是3.14,直接终端下载的话版本很低,且听说会有点问题),解压后打开cmake-gui。

在opencv3.4.2中创建一个build文件夹,打开自己的cmake-gui,选择打开对应路径,然后点击configure按键。

在这里插入图片描述

注意,这个安装位置就很重要,如果你是有多opencv的需求那么一定要修改默认位置,不然会有大问题,如果你只用一个那么你可以修改也可以不用修改。因为我接下来是需要实现多opencv的,所以我这里就进行了修改。

修改CMAKE_INSTALL_PREFIX的默认安装目录为/usr/local/opencv/opencv3.4.2

在OPENCV_EXTRA_MODULES_PATH处,选择opencv_contrib3.4.5扩展库的输入目录(单击这一行后方空白处即可选中)然后选择opencv_contrib-3.2.0文件夹中的modules文件夹,注意,不是只选中opencv_contrib-3.2.0文件夹就好了,需要选中里面的modules文件夹!

修改OPENCV_EXTRA_MODULES_PATH的目录为/home/xxx/opencv-3.4.2/opencv_contrib-3.4.2/modules

然后点击configure按键,如果没有错误那就继续,有就参考下面的报错解决。

最后点击Generate按键,写入build文件夹生成配置文件。

3、终端编译安装

在build目录下打开终端,输入:

make -j4

编译成功之后,再输入

sudo make install

4、配置环境变量

终端打开

sudo gedit  ~/.bashrc

文件底部写入

## opencv3.4.2
export PKG_CONFIG_PATH=/usr/local/opencv/opencv3.4.2/lib/pkgconfig
export LD_LIBRARY_PATH=/usr/local/opencv/opencv3.4.2/lib 

使配置文件生效

source ~/.bashrc

如果想使用之前的版本,在~/.bashrc中注释掉增加的内容,然后source ~/.bashrc即可。

查询OpenCV版本

pkg-config --modversion opencv
pkg-config --modversion opencv4

在这里插入图片描述
到这里我们已经成功配置好了一个 opencv,已经可以使用了。

报错一

IPPICV: Download: ippicv_2017u3_lnx_intel64_general_20180518.tgz CMake
Warning at cmake/OpenCVDownload.cmake:190 (message): IPPICV:
Download failed: 28;“Timeout was reached”

For details please refer to the download log file:

/home/llw/jcsz/opencv/opencv-3.4.2/build/CMakeDownloadLog.txt

Call Stack (most recent call first): 3rdparty/ippicv/ippicv.cmake:42
(ocv_download) cmake/OpenCVFindIPP.cmake:243 (download_ippicv)
cmake/OpenCVFindLibsPerf.cmake:12 (include) CMakeLists.txt:634
(include)

解决方法:
手动下载 ippicv_2017u3_lnx_intel64_general_20180518.tgz

保存路径随意,我是放在路径/home/llw下

2,修改opencv里相关配置文件
打开终端,输入

gedit /home/xxx/opencv_source/opencv/3rdparty/ippicv/ippicv.cmake #记得lc换成自己的用户名

将47行的

"https://raw.githubusercontent.com/opencv/opencv_3rdparty/${IPPICV_COMMIT}/ippicv/"

改为步骤1中手动下载的文件的本地路径:

 "file:///home/llw/" #(仅供参考,根据自己的路径填写)

编辑完成保存退出。

在这里插入图片描述

报错二

CMake Warning at cmake/OpenCVDownload.cmake:190 (message): data:
Download failed: 28;“Timeout was reached”

For details please refer to the download log file:

/home/llw/jcsz/opencv/opencv-3.4.2/build/CMakeDownloadLog.txt

Call Stack (most recent call first):
opencv_contrib-3.4.2/modules/face/CMakeLists.txt:13 (ocv_download)

CMake Warning at opencv_contrib-3.4.2/modules/face/CMakeLists.txt:26
(message): Face: Can’t get model file for face alignment.

解决方法:
卡在face_landmark_model.dat下载的地方,因为在国外所以一直下载不下来。

手动下载 face_landmark_model.dat ,这篇博客提供了网盘链接资源

也可以直接下载:https://raw.githubusercontent.com/opencv/opencv_3rdparty/8afa57abc8229d611c4937165d20e2a2d9fc5a12/face_landmark_model.dat

修改相应的配置文件

gedit /home/xxx/opencv-3.4.2/opencv_contrib-3.4.2/modules/face/CMakeLists.txt

换成自己源码对应的文件夹
将CMakeLists.txt文件的第19行修改为本地路径,即将原来的网址修改为下载的文件保存的路径

"file:///home/xxx/"

路径记得替换为自己face_landmark_model所在的文件夹,不需要直接到face_landmark_model
我将下载下来的face_landmark_model.dat 放在 /home/usrname/install/ 下,所以把下载网址换为本地, 如上所示。
face_landmark_model
重新编译即可。

报错三

xfeatures2d/boostdesc: Download: boostdesc_binboost_064.i CMake
Warning at cmake/OpenCVDownload.cmake:207 (message):
xfeatures2d/boostdesc: Hash mismatch: f6cd2116631666e2f719ead236b82f53
Call Stack (most recent call first):
opencv_contrib-3.4.2/modules/xfeatures2d/cmake/download_boostdesc.cmake:22
(ocv_download)
opencv_contrib-3.4.2/modules/xfeatures2d/CMakeLists.txt:8
(download_boost_descriptors)

解决方法:
064的哈希对不上,以前没遇过这种问题,可能下载的版本不对,不过不管那么多了,我直接把哈希跟换为它要的值,如果以后出问题也可以直接本地更换就行。
在这里插入图片描述

报错四

…/…/lib/libopencv_ts.a(ts_gtest.cpp.o):在函数‘testing::internal::RE::PartialMatch(char
const*, testing::internal::RE const&)’中:
ts_gtest.cpp:(.text.ZN7testing8internal2RE12PartialMatchEPKcRKS1+0x32):对‘regexecA’未定义的引用 collect2: error: ld returned 1 exit status
modules/core/CMakeFiles/opencv_test_core.dir/build.make:769: recipe
for target ‘bin/opencv_test_core’ failed make[2]: ***
[bin/opencv_test_core] Error 1 CMakeFiles/Makefile2:3895: recipe for
target ‘modules/core/CMakeFiles/opencv_test_core.dir/all’ failed
make[1]: *** [modules/core/CMakeFiles/opencv_test_core.dir/all] Error
2 Makefile:165: recipe for target ‘all’ failed make: *** [all] Error 2

解决方法:
在安装opencv4.4.0时的错误,经过查找发现是因为boost 和linux系统自身都有regex.h导致了冲突,导致识别到boost的regex.h文件,可是没找到cmake-gui的regex.h路径更改,于是使用笨办法,临时把/usr/include/boost/regex.h改名可以编译通过,然后改回来。

sudo mv regex.h regex111.h

编译且安装完成后,将文件名对调改回去就行。

5、opencv的多版本安装与管理

在开发不同工程时可能会需要不同版本的OpenCV,因此在电脑上安装多个版本的OpenCV很有必要。成功的关键是安装到不同的路径,并在CMakeLists.txt中找到需要的版本。

多版本安装

在安装了opencv3.4.2后在安装opencv4.4,主要的步骤还是和上面一样,一定要注意编译安装所在的那个路径,区分好了才可以更好的管理。

这里涉及一个问题, OpenCV4以上默认不使用pkg-config,所以需要在cmake-gui里开启OPENCV_GENERATE_PKGCONFIG,该编译选项开启后编译安装就会生成opencv4.pc文件,支持pkg-config功能。

我一开始忘了opencv4编译不会生成pkg-config使用的pc文件,没打勾就编译安装了,我使用以下步骤进行补救:
回到cmake-gui配置的阶段,增加这个步骤

OPENCV_GENERATE_PKGCONFIG 打勾

因为安装时编译的临时文件都还在,所以直接重复make -j和sudo make install步骤即可生成/usr/local/opencv/opencv4.4.0/lib/pkgconfig/opencv4.pc文件。
在这里插入图片描述
在CMakeLists.txt中可设置手动寻找OpenCV的指定路径,如下:

set(OpenCV_DIR /usr/local/opencv/opencv4.4.0/lib/cmake/opencv4)
find_package(OpenCV 4 REQUIRED)

其中,设置在 set(OpenCV_DIR /usr/local/opencv/opencv4.4.0/lib/cmake/opencv4) 的目的主要是:设置opencv路径的时候,找有OpenCVConfig.cmake文件的文件夹,在我的安装目录下,OpenCVConfig.cmake文件在上述的路径中找到了,因此添加这个路径。

如果不进行手动寻找OpenCV的指定路径的话,而只是自动寻找系统路径下配置的OpenCV的话,只需如下指令:
第一个表示自动寻找系统库里版本4以上的,第二个表示找系统库里的最低版本。

find_package(OpenCV 4 REQUIRED)
或者
find_package(OpenCV REQUIRED)

环境变量管理

添加到系统环境变量
修改~/.bashrc:

sudo gedit ~/.bashrc

像下面这样加入新的内容:

##OpenCV_4.4.0
#export PKG_CONFIG_PATH= /usr/local/opencv/opencv4.4.0/lib/pkgconfig
#export LD_LIBRARY_PATH= /usr/local/opencv/opencv4.4.0/lib

##OpenCV_3.4.2
#export PKG_CONFIG_PATH= /usr/local/opencv/opencv3.4.2/lib/pkgconfig
#export LD_LIBRARY_PATH= /usr/local/opencv/opencv3.4.2/lib

新加入OpenCV版本或者暂时不使用的OpenCV版本的建议注释掉。
对需要使用OpenCV_4.4.0,就可以把上面的#去掉。

每次切换后,都需要更新~/.bashrc

source ~/.bashrc 

查询OpenCV版本

pkg-config --modversion opencv
pkg-config --modversion opencv4

在这里插入图片描述
这样唯一的缺点就是每次只能使用一个版本的opencv,而且每次切换版本需要修改bashrc文件
目前我也没有想到更好的解决办法。当然写一个脚本来更改版本也是方便的

希望能够对大家有一些帮助!

猜你喜欢

转载自blog.csdn.net/qq_45848817/article/details/129478111