最近几年,人工智能发展迅速,很多领域已经开始商用,最为有名的当属语音识别,和以人脸识别为代表的机器视觉。如果读者和我一样爱折腾,相信也会对这些有兴趣,希望打造一款自己的人脸识别应用。
OpenCV
OpenCV是一个基于BSD许可(开源)发行的跨平台计算机视觉库,可以运行在Linux、Windows、Android和Mac OS操作系统上。它轻量级而且高效——由一系列 C 语言函数和少量 C++ 类构成,同时提供了Python、Ruby、MATLAB等语言的接口,实现了图像处理和计算机视觉方面的很多通用算法。
OpenCV 已在各个领域得到广泛的应用,包括但不限于:
- 人机互动
- 物体识别
- 图像分割
- 人脸识别
- 动作识别
- 运动跟踪
- 运动分析
- 结构分析
- 汽车安全驾驶
如果读者也和我一样,希望从零基础开始学习使用 OpenCV,可以和本系列文章一起学习,本节将介绍如何下载和安装 OpenCV。
OpenCV 支持多个操作系统多个平台,所以在下载和安装 OpenCV 之前,需要先选择一个平台。因为 Windows 对C语言/C++ 程序员不够友好,而OpenCV是由C系语言开发的,在 Windows 上使用各种依赖的设置非常繁琐,所以我打算再 Ubuntu 上学习 OpenCV。Ubuntu 是 Linux 系的操作系统,安装软件和设置依赖方便,此外,Ubuntu 也可以有漂亮的桌面系统,如下图:
![](https://blog.popkx.com/usr/uploads/2019/06/7073e044cb74c4cece90f16218cb59cc.png)
如果读者不知道如何安装和使用 Ubuntu,可以参考我的专栏文章《》。
下载和安装 OpenCV
首先需要下载 OpenCV 的安装包或者源码。因为 OpenCV 是一个开源的项目,因此读者可以在 GitHub 上下载它的源码,当然,也可以在 OpenCV 官网下载:
![](https://blog.popkx.com/usr/uploads/2019/06/780467f935ade054cbf4e3bd8addfe8e.png)
点击上图中的 Tutorials,可得到如下页面:
![](https://blog.popkx.com/usr/uploads/2019/06/9884ef944c6ec24d35468248c1d23ece.png)
上图中的红框可以选择 OpenCV 的版本,可以发现 OpenCV 最新版本是 4.1.0-dev。作为初学者,我不打算使用最新版本,而是选择学习资源更多的较旧版本,熟练后再去追最新版本。这里选择了 3.4.0 版本:
![](https://blog.popkx.com/usr/uploads/2019/06/d30721ce90db414b38a4564cd8db23c7.png)
点击“Introduction to OpenCV”,选择“Installation in Linux”,即可打开 OpenCV 的官方安装教程。首先需要安装一些依赖包,这在 Ubuntu 上是方便的,只需打开终端,输入以下几条命令:
$ 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
![](https://blog.popkx.com/usr/uploads/2019/06/16f14299d0f8e49f85297ce15af95df1.png)
安装完毕后,找到 OpenCV-3.4.0 的下载资源:
![](https://blog.popkx.com/usr/uploads/2019/06/def7c0c5b600a7746dbe0824007451f9.png)
可以从 GitHub 上下载,或者也可点击 Sources 直接下载:
![](https://blog.popkx.com/usr/uploads/2019/06/01d57e96a2867d72647f3fd066772680.png)
如果希望直接使用 Ubuntu 上下载,可以在终端输入以下命令:
$ wget - c [上图中的下载链接]
下载完成后,输入 unzip 命令解压下载后的压缩包:
$ unzip opencv-3.4.0.zip
![](https://blog.popkx.com/usr/uploads/2019/06/86a9a7b0a9a8a96b00adb5db101b01be.png)
现在进入 opencv-3.4.0 目录,新建 build 文件夹,接下来的编译安装工作在 build 里进行:
$ cd opencv-3.4.0/
$ mkdir build
$ cd build/
然后输入 cmake 命令,在这一步可以使用 CMAKE_INSTALL_PREFIX 指定接下来的安装目录,下面的命令指定的安装目录是 /usr/local,这是 Ubuntu 的系统目录。
$ cmake -D CMAKE_BUILD_TYPE=Release -D CMAKE_INSTALL_PREFIX=/usr/local ..
我不打算在这个目录安装 OpenCV,因为如果需要调试其他版本的 OpenCV,若系统目录已经有其他版本,会比较麻烦。读者也可像我一样将其安装在其他目录:
$ cmake -D CMAKE_BUILD_TYPE=Release -D CMAKE_INSTALL_PREFIX=/lccRoot/xx_programs/opencv-3.4.0 ..
如果希望编译静态库,可以添加-D BUILD_SHARED_LIBS=OFF
。
如果不出意外的话,可以在 build 目录里得到 makefile:
![](https://blog.popkx.com/usr/uploads/2019/06/6e3aba0d84bc6182e4ca7a9cbfe3d5b5.png)
现在直接输入 make 即可编译,为了加快速度,可多使用 -j 多指定几个编译线程:
$ make -j8
输入命令后,即可进入编译阶段,这一过程可能需要几分钟,我们耐心等下:
![](https://blog.popkx.com/usr/uploads/2019/06/1d1cbdfdff2a793a6dc688f15ce6c43a.png)
编译完成后,输入 make install 命令即可将 OpenCV 安装到前面指定的目录:
$ make install
完成后,查看我们指定的安装目录:
![](https://blog.popkx.com/usr/uploads/2019/06/a5835b915ce2568e4f0db89a1382b0b5.png)
发现 OpenCV 的确被安装到此目录了。接下来,我们将写一个简单的程序作为测试。
初试 OpenCV
因为 OpenCV 主要用来处理图像,所以开发工具这里选用跨平台的 QT,新建一个工程,打开 .pro 文件,输入以下内容指定 OpenCV 库的头文件位置和库位置:
![](https://blog.popkx.com/usr/uploads/2019/06/020aa17d6b816df1ecade6aae8e2db19.png)
完成后,写以下C代码:
#include <opencv2/core/core.hpp>
#include <opencv2/highgui/highgui.hpp>
#include <opencv2/opencv.hpp>
using namespace cv;
int main()
{
Mat srcImg = imread("test.jpg");
imshow("test", srcImg);
Mat elem = getStructuringElement(MORPH_RECT, Size(10, 10));
Mat dstImg;
erode(srcImg, dstImg, elem);
imshow("eroded", dstImg);
waitKey(0);
return 0;
}
![](https://blog.popkx.com/usr/uploads/2019/06/7f38184ca01290add922501e1241886d.png)
这段C语言风格的代码将进行图像腐蚀操作,在执行程序之前,需要准备一张名为 test.jpg 的图片作为测试对象,并将其放入可执行程序所在目录,然后点击运行,得到如下输出:
![](https://blog.popkx.com/usr/uploads/2019/06/27053a16c00ecbf5b265efd6eca89720.png)
可以看出,右图被成功腐蚀了。至此我们就完成了 OpenCv 的安装和简单测试,下一节将开始逐步学习 OpenCV。
小结
本节粗略介绍了 OpenCV,读者如果感兴趣,可自行再详细了解下 OpenCV。本节较为详细的介绍了 OpenCV 的安装和简单测试,可以看出,相对于 windows 上繁杂的配置,在 Ubuntu 上使用 OpenCV 要简单许多。另外,以后需要做自己产品或者应用时,Linux 的开发板总体来说要比 windows 获取难度低,价格也要便宜许多。
在cuda10环境中编译,可能会遇到错误:dynlink_nvcuvid.h: No such file or directory
此时,cmake编译的参数将下面变量设置成OFF就可以了
-D BUILD_opencv_cudacodec=OFF