# 在 Ubuntu 系统中安装 OpenCV—Python
## 目标
在本教程中，我们将学习如何在 Ubuntu 系统中安装 OpenCV-Python。以下步骤针对 Ubuntu 16.04（64 位）和 Ubuntu 14.04（32 位）进行了测试。

在 Ubuntu 中，可以通过两种方式安装 OpenCV-Python：
* 直接使用 Ubuntu 软件库中编译好的二进制文件进行安装
* 从源码编译安装

本章将介绍这两种安装方式。另外，要用到几个第三方库。虽然，OpenCV-Python 仅仅需要 **Numpy**（除了其他依赖库，我们稍后会说），但是，在本教程中，我们还会使用 **Matplotlib** 进行一些简单而美观的绘图（我觉得要比 OpenCV 好很多）。 虽然 Matplotlib 不是必选的，但我们强烈推荐安装。同样的，我们也强烈推荐安装 **IPython** ，一个交互式 Python 终端。

## 二进制方式安装 OpenCV-Python
当仅用于编程和开发 OpenCV 应用程序时，此方案最为合适。

使用终端中的以下命令安装 [python-opencv](https://packages.ubuntu.com/trusty/python-opencv)（以 root 用户身份）。
```shell
$ sudo apt-get install python-opencv
```

打开 Python IDLE（或 IPython）并在 Python 终端中键入以下命令。
```python
import cv2 as cv
print(cv.__version__)
```

如果没有打印任何错误，恭喜！你已成功安装 OpenCV-Python。

这种方法虽然简单，但是有个问题。apt 软件库并非总是含有最新版本的 OpenCV。举例来说，写本教程的时候，apt 软件库中的版本是 2.4.8，而最新的 OpenCV 版本是 3.x。对于 Python API，最新版本始终有着更好的支持和最少的 bug。

因此，如果想要获得最新的代码，最好选择下一种方案，即从源码编译安装。另外，如果你某个时候想要给 OpenCV 贡献代码，你也需要这么做。

## 从源码中编译 OpenCV
刚开始的时候，从源代码编译可能看起来有点小复杂，但是一旦你成功了，就没有什么复杂的了。

首先，我们将安装一些依赖库。有些是必需的，有些是可选的。如果不需要，可以跳过可选的依赖库。

### 必需的依赖库
首先，我们需要用 **CMake** 来配置安装，用 **GCC** 来编译，用 **Python-devel** 和 **Numpy** 来构建 Python 绑定，等等。
```shell
sudo apt-get install cmake
sudo apt-get install python-devel numpy
sudo apt-get install gcc gcc-c++
```
接下来，我们需要 GTK 库支持 GUI 功能，需要 v4l 库支持相机功能，需要 ffmpeg 库和 gstreamer 库支持媒体功能，等等。
```shell
sudo apt-get install gtk2-devel
sudo apt-get install ffmpeg-devel
sudo apt-get install gstreamer-plugins-base-devel
```

### 可选的依赖库
上面的依赖库已经足以让你在 Ubuntu 系统上安装 OpenCV。但是，根据你的需求，你可能还要装一些额外的库。下面给出了一个可选依赖库的列表。装或不装，由你决定 :)

OpenCV 自带了 PNG，JPEG，JPEG2000，TIFF，WebP 等图像格式的支持库，但它们可能有点老。如果你想要最新的库，你可以自己安装它们。
```shell
sudo apt-get install libpng-devel
sudo apt-get install libjpeg-turbo-devel
sudo apt-get install jasper-devel
sudo apt-get install openexr-devel
sudo apt-get install libtiff-devel
sudo apt-get install libwebp-devel
```

### 下载 OpenCV
从 OpenCV 的[GitHub 存储库](https://github.com/opencv/opencv)下载最新的源代码。（如果你想为 OpenCV 做贡献，请这么做。为此，你需要先安装 Git）
```shell
$ sudo apt-get install git
$ git clone https://github.com/opencv/opencv.git
```
上面的操作将在你的当前目录下创建一个 opencv 文件夹。clone 可能要花一些时间，具体取决于你的网络延迟。

现在，打开一个终端窗口，并进入刚下的“opencv”文件夹。创建一个“build”文件夹，进入“build”。
```shell
$ mkdir build
$ cd build
```
### 配置和安装
现在，我们已安装好了所有的依赖库，让我们开始安装 OpenCV。必须使用 CMake 配置安装。它指定了要安装哪些模块，安装路径，要使用的其他库，以及是否需要编译文档和示例等。默认参数已配置好，大部分工作都可以自动化完成。

下面的命令通常用于配置 OpenCV 库编译（在 build 文件夹里执行）：
```shell
$ cmake ../
```
OpenCV 默认采用“Release”构建类型，安装路径为“/usr/local”。有关 CMake 选项的其他信息，请参阅 OpenCV [C++编译指南](https://docs.opencv.org/4.0.0/d7/d9f/tutorial_linux_install.html)：

您应该能在 CMake 输出信息中看到这些行（这些意味着已正确安装了 Python）：
```
--   Python 2:
--     Interpreter:                 /usr/bin/python2.7 (ver 2.7.6)
--     Libraries:                   /usr/lib/x86_64-linux-gnu/libpython2.7.so (ver 2.7.6)
--     numpy:                       /usr/lib/python2.7/dist-packages/numpy/core/include (ver 1.8.2)
--     packages path:               lib/python2.7/dist-packages
--
--   Python 3:
--     Interpreter:                 /usr/bin/python3.4 (ver 3.4.3)
--     Libraries:                   /usr/lib/x86_64-linux-gnu/libpython3.4m.so (ver 3.4.3)
--     numpy:                       /usr/lib/python3/dist-packages/numpy/core/include (ver 1.8.2)
--     packages path:               lib/python3.4/dist-packages
```
现在，使用“make”命令编译文件，使用“make install”来安装。
```shell
$ make
# sudo make install
```
安装完成后，所有文件都在“/usr/local/”目录。打开终端，并导入 cv2。
```python
import cv2 as cv
print(cv.__version__)
```
