
1.3.3 在Debian、Ubuntu、Linux Mint以及类似系统上安装
Debian、Ubuntu、Linux Mint以及与Linux相关的发布平台使用apt包管理器。在这些系统上,安装用于Python 3以及包括NumPy和SciPy在内的许多Python模块的包是一件很容易的事情。还可以通过apt获取OpenCV包,但是在编写本书时,这个包还没有更新到OpenCV 4。但是,我们可以从Python的标准包管理pip中获取OpenCV 4(不支持深度摄像头)。也可以从源代码构建OpenCV 4。从源代码构建时,OpenCV可以通过OpenNI 2支持深度摄像头,OpenNI 2可以作为带有安装脚本的一组预编译二进制文件。
不管通过什么方式获取OpenCV,都要首先更新apt,这样就可以获取最新的包。打开终端,运行下面这条命令:

更新apt之后,运行下面这条命令,为Python 3安装NumPy和SciPy:

同样,我们可以使用Ubuntu软件中心,它是apt包管理器的图形前端。
现在,我们必须决定是要OpenCV的一个现成构建(不支持深度摄像头),还是一个自定义构建(支持深度摄像头)。下面将介绍这些备选方案。
1.使用现成的OpenCV包
OpenCV包括opencv_contrib模块在内,可以作为一个pip包进行安装。这就像运行下面的命令一样简单:

如果希望OpenCV安装包含专利算法之类的非免费内容,那么可以运行下面这条命令:

如果打算发布基于OpenCV非免费内容的软件,你应该自己调研适用于特定国家和特定用例的专利和许可问题。OpenCV的非免费内容包括专利SIFT和SURF算法的实现,我们将在第6章中进行介绍。
你可能会发现其中一个pip包提供了你目前想要的所有OpenCV特性。另外,如果你打算使用深度摄像头,或者想要了解OpenCV自定义构建的一般过程,那么不应该安装OpenCV的pip包,而应该从源代码构建OpenCV。
2.从源代码构建OpenCV
要从源代码构建OpenCV,我们需要一个C++构建环境和CMake构建配置系统。具体来说,我们需要CMake 3。在Ubuntu 14.04、Linux Mint 17及其相关系统上,cmake包是指CMake 2,但是还有一个最新的cmake 3包可供使用。在这些系统上,运行下面这些命令,以确保安装了所需的CMake版本及其他构建工具:


另外,在最新的操作系统上,cmake包指CMake 3,我们可以简单地运行下面这条命令:

除了OpenCV的构建过程外,CMake还需要访问网络下载附加依赖项。如果系统使用了代理服务器,那么请确保正确配置了代理服务器的环境变量。具体来说,CMake依赖于http_proxy和https_proxy环境变量。要定义这些环境变量,可以编辑~/.bash_profile脚本,添加下面这些行的内容(请修改它们,以使它们与自己的代理服务器URL和端口号相匹配):

如果不能确定系统是否使用了代理服务器,这可能就没有用了,那么可以忽略这个步骤。
要构建OpenCV的Python绑定,我们需要安装Python 3开发头文件。要安装这些,运行下面这条命令:

要从典型的USB网络摄像头捕捉帧,OpenCV依赖于Linux视频(V4L)。在大多数系统上,V4L是预先安装的,但是万一没有安装的话,请运行下面这条命令:

如前所述,要支持深度摄像头,OpenCV依赖于OpenNI 2。访问https://structure.io/openni,下载适用于Linux和自己的系统架构(x64、x86或者ARM)的OpenNI 2最新压缩文件。将其解压到任意目标地址(命名为<openni2_unzip_destination>)。运行以下命令:

上述安装脚本将配置系统,以便支持USB设备之类的深度摄像头。而且,脚本创建引用<openni2_unzip_destination>内库文件的环境变量。因此,如果之后移除<openni2_unzip_destination>的话,你将需要再次运行install.sh。
现在,我们已经安装了构建环境变量和依赖项,可以获取并构建OpenCV的源代码了。为此,请执行以下步骤:
(1)访问https://opencv.org/releases/,下载最新源代码包。将其解压到任意目标文件夹(命名为<opencv_unzip_destination>)。
(2)访问https://github.com/opencv/opencv_contrib/releases,下载opencv_contrib模块的最新源代码包。将其解压到任意目标文件夹(命名为<opencv_contrib_unzip_destination>)。
(3)打开终端。运行以下命令,创建将要放置OpenCV构建文件的一个目录:

切换到新创建的目录:

(4)现在,我们可以使用CMake生成OpenCV的构建配置。这个配置过程的输出将是一组Makefile,它们是可以用于构建和安装OpenCV的脚本。<opencv_unzip_destination>/opencv/sources/CMakeLists.txt文件中定义了OpenCV的一组完整的CMake配置选项。对本书而言,我们只关心与OpenNI 2支持、Python绑定、opencv_contrib模块和非免费内容相关的选项。通过运行以下命令配置OpenCV:

(5)最后,运行以下命令,解析新生成的Makefile,从而构建并安装OpenCV:

至此,我们已经在Debian、Ubuntu,或者类似的系统上完成了OpenCV构建过程,而且我们还有适合本书所有Python项目的一个自定义构建。