编译、安装Open-CV(4.1.2/3.4.9)

Posted by Dimsmary on July 20, 2020

前言

*作者水平有限,内容可能存在不正确的地方,欢迎批评指正。

​ 一直用的都是python的OpenCV库,安装非常简单,直接pip就能完成安装。但是最近需要用到C++的OpenCV库,这就有点难受了,需要自己编译安装。下面写出安装的全过程。

准备

​ 在ubuntu上和在树莓派上编译安装OpenCV的流程是一样的。

​ 首先需要安装依赖(确保apt更新到最新):

sudo apt install build-essential cmake git pkg-config libgtk-3-dev \
libavcodec-dev libavformat-dev libswscale-dev libv4l-dev \
libxvidcore-dev libx264-dev libjpeg-dev libpng-dev libtiff-dev \
gfortran openexr libatlas-base-dev python3-dev python3-numpy \
libtbb2 libtbb-dev libdc1394-22-dev

​ 编译安装OpenCV需要准备好OpenCV的源代码,在~目录下创建名为OpenCV_build的文件夹,并通过git克隆OpenCV的源代码:

mkdir ~/opencv_build && cd ~/opencv_build
git clone https://github.com/opencv/opencv.git
git clone https://github.com/opencv/opencv_contrib.git

​ 创建并进入build目录:

cd ~/opencv_build/opencv
mkdir build && cd build

编译

接下来我们需要使用cmake生成makefile编译文件,这里注意opencv_contrib/modules路径的设置:

cmake -D CMAKE_BUILD_TYPE=RELEASE \
-D CMAKE_INSTALL_PREFIX=/usr/local \
-D INSTALL_C_EXAMPLES=ON \
-D INSTALL_PYTHON_EXAMPLES=ON \
-D OPENCV_GENERATE_PKGCONFIG=ON \
-D OPENCV_EXTRA_MODULES_PATH=~/opencv_build/opencv_contrib/modules \
-D BUILD_EXAMPLES=ON ..

接下来进行编译,这里的x指的是使用几个CPU核心进行编译。

但在树莓派3b+上编译时使用make -j4时会卡死,可以先使用make -j4编译到卡死的地方,然后重启后再使用make不加参数继续编译。

当然不嫌慢也可以直接使用make进行编译。

make -jx

出错解决

缺失xfeatures2d相关文件(4.1.2/3.4.9均出现该问题)

编译的过程可能不会一帆风顺,其中一个问题就是提示xfeatures2d的相关文件缺失。

这是因为在编译过程中需要下载一些相关的文件,而因为一些奇妙的网络问题会导致下载失败,从而导致编译失败。

解决方法:打开build目录下的CMkaeDownloadLog.txt文件,搜索缺失的文件名将可以找到下载地址,手动下载后复制到~/opencv_contrib/opencv/modules/xfeatures2d/src

缺失xfeatures hpp文件(4.1.2)

cp -r ~/opencv_build/opencv/modules/features2d ~/opencv_opencv/opencv/build

缺失cuda.hpp(3.4.9)

在~/opencv_contrib/opencv/CMakeLists.txt中添加:

INCLUDE_DIRECTORIES("~/opencv_build/opencv_contrib/modules/xfeatures2d/include")

Raspberry Pi Zero?

众所周知,RPI-0的性能极其不行,编译OpenCV几乎要耗费十几个小时。有没什么解决方案呢?

最简单的解决方法就是在性能强的树莓派上(4/3B+)编译好opencv,然后把/usr/local的内容全部复制到树莓派0的文件系统中。

这样可能会导致一些小问题,但正常使用OpenCV是没有问题的。


Creative Commons License
本作品采用CC BY-NC-ND 4.0进行许可。转载,请注明原作者 Dimsmary 及本文源链接。