最近将开发平台逐步转移到Linux上来,会有不少坑来踩,另外发现网上搜索到的内容多数是旧版本的安装过程,不太适宜现在的安装过程。

安装环境

我的开发平台选择的是Ubuntu17.04,因为已经集成了python3,python3就不用装了。这里主要是安装编译环境。

sudo apt install build-essential pkg-config cmake

下载及安装

我在这里使用的是Git的方式获取源码进行编译,你要先确认你的设备上已经安装了Git,最好还掌握一些科学的知识。

sudo apt install git

然后我们来下载需要的opencv源码,其中opencv_contrib是opencv额外的组件。

1
2
git clone https://github.com/opencv/opencv.git
git clone https://github.com/opencv/opencv_contrib.git

然后分别进入两个文件进行版本tag的切换,因为opencv使用了Git的tag标记了版本,若要对opencv进行编译,需要确认opencv和opencv_contrib的版本一致。

1
2
cd opencv 
git checkout -b test 3.3.0
1
2
cd opencv_contrib
git checkout -b test 3.3.0

编译

使用cmake-gui是一种非常友好的方式,我们首先要建立一个文件夹来保存编译好的文件,先进入opencv目录,建立一个build文件夹。

1
mkdir build

然后使用命令cmake-gui召唤cmake-gui
然后在 Where is the source code 中添加 opencv 目录的路径,在 where to build the binaries 中添加 build 目录的路径。

然后点击下面的 Configure,选择 Unix Makefiles,然后选择 default …。点击 OK,从而处理 opencv 目录下的 CMakeLists.txt,并在 build 目录下生成 CMakeCache.txt 及 Makefile 等相关文件。

之后开始修改配置文件。
修改OPENCV_EXTRA_MODULES_PATH 设为 opencv_contrib 中的 modules 目录的路径(比如,/home/hdsky/opencv_contrib/modules 请按实际情况填写)

然后点击 Configure,应用刚才的修改并更新至 build 目录下的 CMakeCache.txt 中。然后点击 Generate,更新 Makefile。

然后回到build文件夹中,使用命令make -j4这里的4是指线程的意思,就是编译使用四个线程,最好根据自己CPU的情况进行填写。

编译完成后执行下面的命令,将可执行文件安装在指定的目录里

1
2
sudo make install
sudo ldconfig

测试

测试C++

新建一个 test.cc

1
2
3
4
5
6
7
8
#include <opencv2/opencv.hpp>
using namespace cv;
int main()
{
Mat img;

return 0;
}

然后使用下面的命令

1
2
3
4
5
export PKG_CONFIG_PATH=/usr/local/lib/pkgconfig
# 那个 ` 是 esc 键下面的字符。
g++ test.cc `pkg-config --cflags --libs opencv`
# 若无错误产生,则表示成功安装;否则安装失败。
./a.out

测试OpenCV for Python3

新建一个test.py

1
import cv2

然后使用python3 test.py
如果没有产生错误,则说明安装成功;否则安装失败。

我踩到的一些坑

0.编译的时候cmake需要下载一些组件,需要掌握科学的知识。

1.在编译的时候先是遇到了QT的错误,在make -j4的时候可以看到error log的里面又出现大量的QT错误,这时候可以使用sudo apt install qt-sdk来安装QT的一系列组件。

2.[modules/xfeatures2d/CMakeFiles/opencv_xfeatures2d.dir/all] Error 2
遇到这个错误或者类似的出现在opencv_contrib模块中的一些错误,很有可能是opencv_contrib的版本和opencv版本的不一致造成的。因为opencv_contrib这个模块带有很多实验性的功能,一般开发进度是早于opencv的版本,这时候需要使用Git 的tag版本标记切换本地分支的方式回到官方标记的适用于某一版本的opencv_contrib(因为Git不太熟悉,这种说法可能有所错误),总之需要检查opencv_contrib的版本要和opencv一致。


参考资料

[Jason’s Blog Ubuntu 下安装 OpenCV3](http://cuckootan.me/2016/10/01/Linux/Ubuntu 下安装 OpenCV3/)

opencv_contrib