系列文章目录
参考文献
参考文献
参考文献
参考文献
前言
之前在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 Sources和openc_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/ 下,所以把下载网址换为本地, 如上所示。
重新编译即可。
报错三
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文件
目前我也没有想到更好的解决办法。当然写一个脚本来更改版本也是方便的文章来源:https://www.toymoban.com/news/detail-450191.html
希望能够对大家有一些帮助!文章来源地址https://www.toymoban.com/news/detail-450191.html
到了这里,关于视觉学习笔记10——opencv的卸载、安装与多版本管理的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!