前言:此篇介绍在ubuntu下安装opencv库及opencv_contrib库,其编译依赖cmake,因此需先下载安装cmake,后续将进阶到ARM开发板上,并进行opencv图像处理相关开发如人脸识别等。
$开头代表linux命令
Cmake的安装有两种方式(二选一):1.apt-get命令安装(推荐)、2. 源码安装。
命令安装:
$ sudo apt-get install cmake
$ cmake --version // 查看版本,检测是否安装成功
备注:
Ubuntu需联网,若安装失败,可采用以下编译源码方式安装
若成功,则可跳过源码安装方式
若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).
执行命令:
$ 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方式,需联网。
步骤如下:
OpenCV官网:Releases - OpenCV
Github官方:GitHub - opencv/opencv: Open Source Computer Vision Library
实验版本:opencv-4.2.0.zip
将源码包放到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
首先,大概读下根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等包,注意联网
若下载失败:暂忽略,未发现有影响。
$ make
编译时间较长,耐心等候…
直到输出如下:
[100%] Linking CXX executable ../../bin/opencv_version
[100%] Built target opencv_version
编译完成,进度条去到100%
$ sudo make install
即安装到CMAKE_INSTALL_PREFIX指定目录下
$ ls /usr/local/opencv4/
bin include lib share
进入源码目录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
…
以上出现错误,是因为没配置好编译及运行环境;
方式一:手动指定库
根据错误信息,是找不到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安装成功!
同上,官网下载对应版本: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
先将之前编译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的路径。
$make
错误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
$ sudo make install
到此,安装完成!