ubuntu18.04安装OpenCV3.4.12步骤及安装中遇到的一些问题

一、安装步骤

1.下载源文件

在OpenCV的官方网站下载OpenCV的3.4.12源文件
OpenCV源文件下载地址
并下载3.4.12版本的contrib包
OpenCV_contrib下载地址
(其中contrib包是OpenCV中一些比较新的或者不那么稳定的算法模块,而OpenCV的主体中是比较稳定的算法模块)

2.解压

将OpenCV解压到喜欢的位置,例如/home/dada, 如下图
在这里插入图片描述

然后将contrib安装包解压到OpenCV的安装目录下,如下图
在这里插入图片描述

3.安装必须的依赖包

首先,更新一下

sudo apt-get update
sudo apt-get upgrade

然后安装依赖包

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  
 
sudo apt-get install qt5-default ccache libv4l-dev libavresample-dev  libgphoto2-dev libopenblas-base libopenblas-dev doxygen  openjdk-8-jdk pylint libvtk6-dev
 
sudo apt-get install pkg-config

在上述依赖库安装完成之后才能开始后续操作。在对上述代码复制时最好一次一句地复制,否则无法安装,终端中会直接跳过,在选择Y/n时无法选择Yes。

可能遇到的问题
其中可能遇见无法安装libjasper-dev的问题,类似下面的页面

XXX@XXX:~/Files/opencv-3.1.0$ sudo apt-get install libjasper-dev
Reading package lists... Done
Building dependency tree       
Reading state information... Done
E: Unable to locate package libjasper-dev

解决方案:

sudo add-apt-repository "deb http://security.ubuntu.com/ubuntu xenial-security main"
sudo apt update
sudo apt install libjasper1 libjasper-dev

其中libjasper1是libjasper-dev的依赖包,然后再次安装

sudo apt install libjasper1 libjasper-dev

可以完成所有依赖包的安装操作。

4.cmake

  1. 在终端进入OpenCV的目录中

  2. 创建一个build文件夹并进入

     mkdir build
     cd build
    
  3. cmake

cmake -D CMAKE_BUILD_TYPE=RELEASE -D CMAKE_INSTALL_PREFIX=/usr/local -D WITH_GTK=ON -D OPENCV_GENERATE_PKGCONFIG=YES -D OPENCV_EXTRA_MODULES_PATH=../opencv_contrib-3.4.12/modules -DOPENCV_ENABLE_NONFREE=True ..
  • 注意OPENCV_EXTRA_MODULES_PATH 要根据你的实际情况转变,把它换成你的 contrib 目录下的 modules 目录,在我的电脑上这个目录是../opencv3.4.12_contrib/modules, 此外,命令的最后两个.不能落掉
  • OPENCV_GENERATE_PKGCONFIG=YES表示自动生成 OpenCV 的 pkgconfig 文件,因此在 /usr/local/lib/pkgconfig 路径可以看到文件 opencv4.pc
  • -DOPENCV_ENABLE_NONFREE=True表示使用nonfree模块,包括sift等有专利权的模块。

5. 安装OpenCV

  1. make
sudo make 

sudo make -j$(nproc)

make -jn表示用n个系统内核进行编译,如果你知道自己的系统内核数目可以手写,如make -j4 make -j8等,如果不知道就可以使用make -j$(nproc)来自动获取内核数量。
有时候使用使用多线程编译会出现一些错误,为了求稳可以直接使用sudo make, 但是这样会慢一些
2) make install

sudo make install 

到这一步代表opencv安装成功,若第4步或第5步中间问题,建议直接删除bulid文件夹,并从建立build文件夹开始重新走一遍。

6.配置环境

  1. 将OpenCV库添加到系统路径
    打开文件
sudo gedit /etc/ld.so.conf.d/opencv.conf

在空白文档中添加(记得保存)

/usr/local/lib

接下来配置库

sudo ldconfig
  1. 配置系统bash

修改/bash.bashrc

sudo gedit /etc/bash.bashrc

在文件尾添加

export PKG_CONFIG_PATH=/usr/local/opencv/lib/pkgconfig 
export LD_LIBRARY_PATH=/usr/local/opencv/lib 

保存,然后执行下面的命令

source /etc/bash.bashrc

7.验证是否成功

  1. 在终端中输入以下命令,如果安装成功,会显示版本号
pkg-config --modversion opencv

我的是3.4.12,显示如图
在这里插入图片描述
2. 测试能否编译运行OpenCV程序
进入opencv-3.4.12/samples/cpp/example_cmake目录,在终端输入以下命令

cmake .
make
./opencv_example

如果成功,你会看到一张自己的脸

在这里插入图片描述

二、遇到的问题及解决方法

1. 提示缺少boostdesc_bgm.i

这个问题出现在第4步cmake的过程中。

原因分析:
查看 build 文件夹下的日志文件 CMakeDownloadLog.txt,在日志文件CMakeDownloadLog.txt中搜索 boostdesc_bgm.i 关键词 ,发现这个文件下载失败了。

解决方法

  1. 手动进入它的默认下载地址下载
    日志文件中有它的下载地址,直接复制到浏览器打开,网络可以的话,能够直接看到它的源码,直接创建一个同名文件,将源码拷贝到里面,放在 opencv_contrib-3.4.12/modules/xfeatures2d/src/ 路径下即可。
    总共有以下几个文件,都需要下载并进行相同的操作.(但我在这一步打开网页失败了,所以采用第二种更为简单的方法)
    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
    在这里插入图片描述
  2. 直接在下面这个网盘中下载
    链接:https://pan.baidu.com/s/17XhXX_cLz46bsj9ZWRkNIg
    提取码:p50x

2. 提示xfeatures2d.hpp: 没有那个文件或目录

在这里插入图片描述

这个问题出现在第5步的1), 在这一步中还有一些其他文件的报错,如cuda.hpp,nonfree.hpp, 解决方法也是相同的。

解决方法:

  • 简单方法
    直接更改stitching模块的cmakelist,CMakeLists.txt文件所在路径为: <你的路径>/opencv-3.4.12/modules/stitching/ CMakeLists.txt
    然后在CMakeLists.txt增加以下内容:
IINCLUDE_DIRECTORIES("/home/dada/opencv-3.4.12/opencv_contrib-3.4.12/modules/xfeatures2d/include")

具体路径根据你电脑中的路径稍作修改

但有时候这种方法无效,就只能用第二种较为麻烦的方法

  • 麻烦方法
    在make的时候,默认使用的是相对路径,我们只需要在文件夹中找到相应文件的绝对路径,再将相对路径改成绝对路径就可以了。
    比如说在上图的问题中,提示/home/dada/opencv-3.4.12/modules/stitching/src/matchers.cpp:52:10出现了error,无法按照"opencv2/xfeatures2d.hpp"这个路径找到这个xfeatures2d.hpp文件。

我们首先在opencv目录中搜索xfeatures2d.hpp文件,有两种方法
1)在终端中执行以下命令

	sudo find . -name "xfeatures2d.hpp"

2)在文件管理器OpenCV目录下按ctrl+f进行搜索

最终我们找到这个文件的路径为/home/dada/opencv-3.4.12/opencv_contrib-3.4.12/modules/xfeatures2d/include/opencv2/xfeatures2d.hpp

接下来,我们打开报错的位置/home/dada/opencv-3.4.12/modules/stitching/src/matchers.cpp这个文件的第52行,将其中的路径改为我们刚刚找到的绝对路径,如图
在这里插入图片描述

最后,我们重新进行make(从第5步开始就可以,不需要从第4步开始)。在这一步骤中遇到的其他文件的这个问题也可以用这种方式来解决。

3. 在编译运行程序时提示无法打开"raise.c"

在这里插入图片描述对问题进行搜索,大多数文章都是表示是由于缺少glibc库造成的,如这篇文章,按其中的步骤安装glibc库并更改了launch.json中的路径,依然无效。
最后找到一个治标不治本的方法——将相对路径改为绝对路径,更改后程序可以正常运行
在这里插入图片描述这个问题暂时放在这里,待完全解决后再来更新本文章,如果各位有什么解决方法或建议请发表在评论区或私信笔者,笔者将不胜感激

参考:
https://blog.csdn.net/qq_37975595/article/details/109179388
https://blog.csdn.net/weixin_45117253/article/details/103861245

猜你喜欢

转载自blog.csdn.net/dada19980122/article/details/109723798