前言:此篇介绍在ubuntu下安装opencv库及opencv_contrib库,其编译依赖cmake,因此需先下载安装cmake,后续将进阶到ARM开发板上,并进行opencv图像处理相关开发如人脸识别等。

$开头代表linux命令

1. Cmake的编译及安装

Cmake的安装有两种方式(二选一):1.apt-get命令安装(推荐)、2. 源码安装。

1.1 apt-get命令安装(推荐)

命令安装:

$ sudo apt-get install cmake

$ cmake --version               // 查看版本,检测是否安装成功

备注:

Ubuntu需联网,若安装失败,可采用以下编译源码方式安装

若成功,则可跳过源码安装方式

1.2 编译源码安装

若apt-get方式安装成功,则跳过此步!

下载cmake

到官网下载:Download | CMake

本实验版本:cmake-3.17.0.tar.gz

解压:

将压缩包放于ubuntu某一目录下,进行解压:

$tar zxvf cmake-3.17.0.tar.gz

得到解压后的源码目录:cmake-3.17.0

编译及安装:

进入源码目录:

$ cd cmake-3.17.0/

首先读说明文档README.rst,里面有介绍如何配置/编译/安装,连命令都给出了:

$ ./bootstrap && make &&sudo make install

分别为:配置、编译、安装(采用默认配置值)

$ cmake --version              // 查看版本,检测是否安装成功

最终,查看版本有版本信息输出才算成功:


zengzr@zengzr-ubu:~$ cmake --version

cmake version 3.5.1

CMake suite maintained and supported by Kitware (kitware.com/cmake).


2. 安装依赖库

执行命令:

$ sudo apt-get install build-essential libgtk2.0-dev libavcodec-dev libavformat-dev libjpeg-dev libtiff5-dev libswscale-dev pkg-config

【补充】:

显示图像imshow(),正常显示几秒后报错:

Gtk-Message: 11:37:50.847: Failed to load module "canberra-gtk-module"

缺少库,执行以下命令安装:

$ sudo apt-get install libcanberra-gtk-module

安装opencv_contrib依赖库:

执行命令:

$ sudo apt-get install python-dev python-numpy libtbb2 libtbb-dev libjpeg-dev libpng-dev libtiff-dev libdc1394-22-dev git

若报错:” E: 有几个软件包无法下载,要不运行 apt-get update 或者加上 --fix-missing 的选项再试试?”,则尝试下更新服务器软件信息,再重新安装:

$ sudo apt-get update

注:

原本是用libtiff4-dev的,但出错了并提示用libtiff5-dev,那就用它。

所需依赖库较多,请务必要采用apt-get方式,需联网。

3. Opencv的编译及安装

步骤如下:

3.1 下载opencv

OpenCV官网:Releases - OpenCV

Github官方:GitHub - opencv/opencv: Open Source Computer Vision Library

实验版本:opencv-4.2.0.zip

3.2 解压:

将源码包放到Ubuntu某目录下(如/data目录下),解压

$unzip opencv-4.2.0.zip

得到解压目录:opencv-4.2.0

编译准备

进入解压后的目录opencv-4.2.0,创建编译目录build并进入(编译过程产生的文件放于此编译目录下):

$ cd opencv-4.2.0/

$ mkdir build && cd build

3.3 编译选项配置

首先,大概读下根CMakeList.txt(在opencv-4.2.0根目录),里面有关编译配置的信息:

Cmake相关、编译器及平台架构、三方依赖库、编译配置、安装配置…等。

先配置编译选项:(在build目录下操作)

$ cmake -D CMAKE_BUILD_TYPE=Release -D OPENCV_GENERATE_PKGCONFIG=YES -D CMAKE_INSTALL_PREFIX=/usr/local/opencv4 ../

CMAKE_BUILD_TYPE ---指定编译发布版本

OPENCV_GENERATE_PKGCONFIG ---生成opencv4.pc文件,支持pkg-config功能

CMAKE_INSTALL_PREFIX---指定安装路径为/usr/lib/opencv4(若不指定则默认/usr/local)

../---指定根CMakeList.txt文件路径,在opencv-4.2.0根目录(../表示上一级)

配置成功后,最终输出:


--   Install to:                    /usr/local/opencv4

-- -----------------------------------------------------------------

--

-- Configuring done

-- Generating done

-- Build files have been written to: /data/open_source/opencv-4.2.0/build


PS:过程会下载ippicv_2019_lnx_intel64_general_20180723.tgz等包,注意联网

若下载失败:暂忽略,未发现有影响。

3.4 编译

$ make

编译时间较长,耐心等候…

直到输出如下:


[100%] Linking CXX executable ../../bin/opencv_version

[100%] Built target opencv_version


编译完成,进度条去到100%

3.5 安装

$ sudo make install

即安装到CMAKE_INSTALL_PREFIX指定目录下

$ ls /usr/local/opencv4/

bin  include  lib  share

3.6 测试

进入源码目录samples/cpp/example_cmake路径下的示例:

$ cmake ./

报错:


Could not find a package configuration file provided by "OpenCV" with any

of the following names:

OpenCVConfig.cmake

           opencv-config.cmake

…


3.7 配置环境

以上出现错误,是因为没配置好编译及运行环境;

方式一:手动指定库

根据错误信息,是找不到xxx.cmake文件,在库的安装路径的lib/cmake/opencv4有这两个文件,手动指定(在samples/cpp/example_cmake路径下CMakeLists.txt中find_package()前面添加):


set(OpenCV_DIR /usr/lib/opencv/lib/cmake/opencv4)


再重新编译:

$ cmake ./

$ make

最终会生成可执行文件:opencv_example

方式二:将配置到系统环境(建议)

由于编译配置了OPENCV_GENERATE_PKGCONFIG=YES

因此,会在库的安装路径下生成opecv4.pc文件,

即:/usr/local/opencv4/lib/pkgconfig/opencv4.pc

在/etc/ld.so.conf.d/目录下创建opencv.conf,并写入库的路径:

$ sudo vi /etc/ld.so.conf.d/opencv.conf

将以下行写入opencv.conf文件并保存:

/usr/local/opencv4/lib

执行命令使其生效:

$ sudo ldconfig

配置bash:

在/etc/bash.bashrc的末尾加上以下两行:


PKG_CONFIG_PATH=$PKG_CONFIG_PATH:/usr/local/opencv4/lib/pkgconfig

export PKG_CONFIG_PATH


注:/usr/local/opencv4/lib/pkgconfig为opecv4.pc文件的路径

再使其生效:

$ source /etc/bash.bashrc

可用以下命令检验是否配置成功:

$ pkg-config --libs opencv4

注:若有多个版本,可在CMakeList.txt中指定版本,如指定3.2.0:

find_package(OpenCV 3.2.0 REQUIRED)

运行示例

在刚刚的目录下:(源码目录samples/cpp/example_cmake,请先cmake ./再make编译)

$ ./opencv_example

若有摄像头则会打开摄像,若无则会弹出界面显示“HELLO OPENCV”

至此,若程序成功跑起来,证明opencv安装成功!

4. OPENCV_CONTRIB的编译安装

4.1 下载opencv_contrib

同上,官网下载对应版本:opencv_contrib-4.2.0.zip

Github官方:GitHub - opencv/opencv_contrib: Repository for OpenCV's extra modules

解压移动

解压contrib,并移动到opencv目录下:

$ unzip opencv_contrib-4.2.0.zip

$ mv opencv_contrib-4.2.0 opencv-4.2.0

4.2 配置编译项

先将之前编译opencv的build目录清空,再配置:

$ cd opencv-4.2.0 /build

$ rm * -rf

$ cmake -D CMAKE_BUILD_TYPE=Release -D OPENCV_GENERATE_PKGCONFIG=YES -D CMAKE_INSTALL_PREFIX=/usr/local/opencv4 -D OPENCV_EXTRA_MODULES_PATH=../opencv_contrib-4.2.0/modules/ ../

对比编译opencv时多了OPENCV_EXTRA_MODULES_PATH参数,指定contrib库modules的路径。

4.3 编译

$make

4.4 错误处理

错误1


[84%]:opencv-4.2.0/opencv_contrib-4.2.0/modules/xfeatures2d/src/boostdesc.cpp:654:37: fatal error: boostdesc_bgm.i: 没有那个文件或目录


原因1:在配置时会自动下载此文件,但失败了:

-- xfeatures2d/boostdesc: Download: boostdesc_bgm.i-- Try 1 failed …

解决1:缺少文件,手动将文件放于上述路径中(见附件:boostdesc_xxx.i与vgg_xxx.i文件.rar),将所有文件放于opencv_contrib-4.2.0/modules/xfeatures2d/src/下。

错误2


[85%]: opencv-4.2.0/opencv_contrib-4.2.0/modules/xfeatures2d/test/test_rotation_and_scale_invariance.cpp:7:82: fatal error: features2d/test/test_detectors_invariance.impl.hpp: 没有那个文件或目录


解决2:能在opencv-4.2.0/modules/features2d/test/找到些文件,将其复制到opencv_contrib-4.2.0/modules/xfeatures2d/test/目录下,并将出错的地方修改:

test_rotation_and_scale_invariance.cpp文件中第7行:

将#include "features2d/test/test_detectors_regression.impl.hpp" 改为:

#include "test_detectors_regression.impl.hpp"

根据错误提示修改,其他的类似错误也是这样改,直到编译通过。(共5处)

[100%] Linking CXX executable ../../bin/opencv_version

[100%] Built target opencv_version

最终编译成功!

温馨提示:缺少的文件可在官方github上opencv_3rdparty选择相应branch下载:

GitHub - opencv/opencv_3rdparty at contrib_xfeatures2d_boostdesc

错误3

c++: internal compiler error: Killed (program cc1plus)

原因3:内存不足导致的

解决3:将虚拟机内存扩大(如:由2G扩至3G),之后再编译即可通过。

错误4

可能还会出现跟JAVA相关的错误,可以将JAVA关掉:

在CMAKE时将JAVA关掉,加上:

-D BUILD_BUILD=NO                                          

4.5 安装

$ sudo make install

到此,安装完成!