Ubuntu16.04 下 Python3 虚拟环境安装 OpenCV

前言

最近在看 Light Head Rcnn 的 Tensorflow 源码,在 Python3 下需要用到 OpenCV ,鉴于我的 Ubuntu 下已经装了 Python2.7 的 OpenCV2.4.13.7 点击查看安装教程。所以这次在虚拟环境下配置一下 Python3 的 OpenCV,按照以下步骤直接装了最新的 OpenCV4.0.0-pre。

安装步骤

1. 各种依赖包的安装

升级一些预安装的软件包:

1
2
$ sudo apt-get update
$ sudo apt-get upgrade

安装一些编译 OpenCV 所需要的开发工具:

1
$ sudo apt-get install build-essential cmake git pkg-config

安装一些用于从磁盘中读取各种图片格式所需要的依赖包:

1
$ sudo apt-get install libjpeg8-dev libtiff4-dev libjasper-dev libpng12-dev

安装一些用于从磁盘中读取视频所需要的依赖包:

1
$ sudo apt-get install libavcodec-dev libavformat-dev libswscale-dev libv4l-dev

安装以后使用 OpenCV 的 GUI 时所需要的 GTK:

1
$ sudo apt-get install libgtk2.0-dev

安装用于优化 OpenCV 内部各种功能的依赖包,例如矩阵操作:

1
$ sudo apt-get install libatlas-base-dev gfortran

2. 设置 Python3 的相关操作

首先安装 Python 的包管理工具 pip。安装 Python3 的 pip

1
2
$ wget https://bootstrap.pypa.io/get-pip.py
$ sudo python3 get-pip.py

注意: 在安装 pip 的时候使用的是 python3,如果不用 python3 的话,默认安装的将是 python2 的。

本文前言中说了:是在虚拟环境下安装 Python3 的 OpenCV。所以在这里搭建 Python3 的虚拟环境需要用到 virtualenvvirtualenvwrapper ,下面先使用 pip 安装 virtualenvvirtualenvwrapper

1
$ sudo pip3 install virtualenv virtualenvwrapper

注意: 在这里使用的也是 pip3 ,而不是 pip ,使用 pip3 安装确保将这两个包装在 Python3 的环境下。

下面就要更新环境变量了,在 ~/.bashrc 文件的最后添加上以下环境变量信息:

1
2
3
4
# virtualenv and virtualenvwrapper
export VIRTUALENVWRAPPER_PYTHON=/usr/bin/python3
export WORKON_HOME=$HOME/.virtualenvs
source /usr/local/bin/virtualenvwrapper.sh

注意一下在这里是怎么将 VIRTUALENVWRAPPER_PYTHON 指向 Python3 所在的 Ubuntu 系统路径的。

为了确保刚刚配置的环境变量有效,执行以下命令:

1
$ source ~/.bashrc

然后,创建下面安装 Python3 的 OpenCV 需要使用 cv 虚拟环境:

1
$ mkvirtualenv cv

这时可以看到终端中用户名的前面有了 (cv) 的标识。目前算是完成了 Python 设置的一半了,下面需要安装 Python3 的开发文件:

1
$ sudo apt-get install python3.5-dev

我这里的 Python3 的版本是 3.5 ,所以我装的是 python3.5-dev
OpenCV 还需要用到 Numpy ,下一步安装 Numpy :

1
$ pip install numpy

注意: 这一步出错的朋友请移步本文开头的参考链接,那里有解决方案。

3. 安装 OpenCV

到此,安装 OpenCV 所需要设置的环境都设置完毕,下面开始下载 OpenCV 的源码:

1
$ git clone https://github.com/Itseez/opencv.git

注意: 本文开头的参考文章中有安装 OpenCV 的 contrib库 ,目前我还用不到,所以就不占用那个空间去装了,需要的还请移步自取。

下载好源码以后就是编译了:

1
2
3
4
$ cd opencv
$ mkdir release
$ cd release
$ cmake -D CMAKE_BUILD_TYPE=RELEASE -D CMAKE_INSTALL_PREFIX=/usr/local -D INSTALL_C_EXAMPLES=ON -D INSTALL_PYTHON_EXAMPLES=ON -D BUILD_EXAMPLES=ON ..

cmake 命令结束以后就可以看到以下 python3 的信息了:

注意: 在 cmake 以后看到 python3 的信息才能进行下面的操作。

下面开始 OpenCV 的编译操作:

1
$ make -j4

注意: 上述命令中的 4 根据处理器的内核数来设置,可以加快编译速度。

在编译的时候遇到错误:

1
2
fatal error: Eigen/Eigenvalues: No such file or directory
compilation terminated.

解决方法:
重新 cmake ,在 cmake 的时候加入参数 -D WITH_EIGEN=OFF,然后重新编译就通过了。

在没有报错编译完成之后,可以执行下列命令将 OpenCV 装到系统里:

1
2
$ sudo make install
$ sudo ldconfig

4. 设置 OpenCV 的系统链接

在没有错误的情况下执行完以上步骤,执行命令:

1
$ ls -l /usr/local/lib/python3.5/site-packages/

就可以看到 OpenCV 的相关信息了:

在这里 OpenCV 的名字是 cv2.cpython-35m-x86_64-linux-gnu.so
下面为了能在创建的 cv 虚拟环境中使用 OpenCV ,需要将这个 site-packages 文件夹下的 cv2.cpython-35m-x86_64-linux-gnu.so 文件链接到 cv 虚拟环境中:

1
2
$ cd ~/.virtualenvs/cv/lib/python3.5/site-packages/
$ ln -s /usr/local/lib/python3.5/site-packages/cv2.cpython-35m-x86_64-linux-gnu.so cv2.so

在上述命令中将 cv2.cpython-35m-x86_64-linux-gnu.so 的名字改成了 cv2.so,这样在 Python3 中就能直接导入 cv2 了。这时候使用 ls 命令就可以看到 cv2.so 文件了。
如果没有 cv2.so 文件,将不能导入 cv2

5. 测试 Python3 安装的 OpenCV

打开终端,进入创建的 cv 虚拟环境,在 Python 中导入 cv2 查看 OpenCV 的版本:

1
2
3
4
5
$ workon cv
$ python
>>> import cv2
>>> cv2.__version__
'4.0.0-pre'

结束,安装成功。

参考:https://www.pyimagesearch.com/2015/07/20/install-opencv-3-0-and-python-3-4-on-ubuntu/