本博文会介绍如何在Ubuntu16.04上安装OpenCV3.1.0版本,有些人会有疑问,之前用过这条命令sudo apt-get install python-opencv
安装OpenCV,也可以使用,但注意通过上面命令安装的OpenCV不是最新版本的,一般是2.x版本的。
闲话少说,我们下面开始在Ubuntu16.04上安装OpenCV3.1.0。
Step1:在Ubuntu16.04 安装一些OpenCV需要的依赖项
首先打开你的terminal对已安装的软件包进行更新和升级:
$sudo apt-get update
#update 是用来同步 /etc/apt/sources.list 和 /etc/apt/sources.list.d 中列出的源的索引,获取最新的软件包
$sudo apt-get upgrade
#upgrade升级已安装的所有软件包,升级之后的版本就是本地索引里的
下一步安装一些开发工具:
$sudo apt-get install build-essential cmake pkg-config
OpenCV 是图像处理和计算机视觉的库。为了方便后面学习图像和视频的处理,这里安装一些必要的库。
$sudo apt-get install libjpeg8-dev libtiff5-dev libjasper-dev libpng12-dev
#以上从磁盘下载图片的库
$sudo apt-get install libavcodec-dev libavformat-dev libswscale-dev libv4l-dev
$sudo apt-get install libxvidcore-dev libx264-dev
#上面两行命令来安装用来处理视频流和从摄像头采集帧的库
接下来安装处理OpenCV GUI 操作的模块——highgui,其实这个模块是依赖于GTK库的,GTK库通过下面的命令安装:
$sudo apt-get install libgtk-3-dev
安装一些能够优化或者是提升OpenCV功能的库,像对矩阵的处理等。
$sudo apt-get install libatlas-base-dev gfortran
安装python2.7和python3.5类库的头文件:
$sudo apt-get install python2.7-dev python3.5-dev
PS: linux发行版通常会把类库的头文件和相关的pkg-config分拆成一个单独的xxx-dev(el)包。如果你需要安装源外(第三方)的Python类库而这个类库内还有编译的调用Python API的C/C++文件时,需要安装python-dev。下面我们会对OpenCV执行cmake,所以次响必须安装,否则会报错。
Step2:下载OpenCV源文件:
下载最新版本的OpenCV zip文件并解压。
$cd ~
$wget -O opencv.zip https://github.com/Itseez/opencv/archive/3.1.0.zip
$unzip opencv.zip
除了这个之外,我们还需要下载OpenCV_contrib 文件
$wget -O opencv_contrib.zip https://github.com/Itseez/opencv_contrib/archive/3.1.0.zip
$unzip opencv_contrib.zip
对于OpenCV3+来说,一些功能被移到了opencv_contrib里,像SIFT和SURF,所以我们同样需要这个文件夹。
注意: opencv 和opencv_contrib的版本必须是一致的,opencv-3.1.0必须和opencv_contrib-3.1.0后面的数字保持一致,这样编译的过程才不会出错。
Step3:设置Python的环境,python2+或者是Python3+
这一步,我们开始设置Python的开发环境,首先让我们安装pip
$cd ~
$wget https://bootstrap.pypa.io/get-pip.py
$sudo python get-pip.py
在这介绍一个可以设置Python虚拟环境的工具,virtualenv
和virtualenvwrapper
。他们可以用来设置独立的Python环境,对于每一个项目来说,你可以根据需要设置为使用python2.7.12 或者是Python3.5。之前我也接触过virtualenv
和virtualenvwrapper
,但是没有搞清楚怎么用,所以放弃了。通过这次的再次使用,我感觉到它们是非常好用的工具。当然,你也可以选择不适用,Ubuntu16.04默认的Python版本是python2.7.12 。
安装virtualenv
和virtualenvwrapper
$sudo pip install virtualenv virtualenvwrapper
$sudo rm -rf ~/get-pip.py ~/.cache/pip
在virtualenv
和virtualenvwrapper
安装完成之后我们需要升级~/.bashrc
文件。使用vi
或者vim
打开~/.bashrc
文件,将下面的行添加到文件的最后即可。
# virtualenv and virtualenvwrapper
export WORKON_HOME=$HOME/.virtualenvs
source /usr/local/bin/virtualenvwrapper.sh
修改~/.bashrc
文件之后,重新加载修改项
source ~/.bashrc
创建python的虚拟环境
使用mkvirtualenv
创建python的虚拟环境
使用下面的命令创建python2的虚拟环境:
$mkvirtualenv cv3 -p python2
如果你想创建Python3的虚拟环境,和上面一样,只不过是把Python2
换成Python3
,用下面的命令创建。
$mkvirtualenv cv3 -p python3
PS:上面命令中的cv3
是你想创建虚拟环境的名字,你可以任意设置成任意的名字,在这我设置成了cv3
。同时,你也可以同时用不同的名字设置几个不同的Python环境,除了cv3
,我还设置了另外一个Python的环境keras
下面我们用workon
命令去切换Python的虚拟环境:
从上图可以看出,我设置连个Python虚拟环境,一个是python2.7.12版本的keras
,另一个是Python3.5.2版本的cv3
。如果你想退出虚拟环境,使用deactivate
命令,如上图所示。
PS:当你想在某个虚拟环境下工作时,切记使用workon 名字
这个命令,保证在username@username
前面有(你的虚拟环境的名字)
。例如上图所示在shu@shu
前面有(cv3)
或者(keras)
的名字
在Python的虚拟环境中安装Numpy
包。
首先进入虚拟环境:workon cv3
使用下面命令安装numpy的包
$pip install numpy
注意:使用上面的命令一定不要加sudo
,使用sudo
将不会把numpy包安装到虚拟环境中,而是安装到了root
。我安装的时候一直使用sudo
导致我不能在虚拟环境中使用numpy,用了好长时间才搞定。
Step4:在Ubuntu16.04上设置并编译OpenCV
首先进入虚拟环境:workon cv3
确保进入虚拟环境后,我们使用cmake
设置build
:
$cd ~/opencv-3.1.0/
$mkdir build
$cd build
$ cmake -D CMAKE_BUILD_TYPE=RELEASE
-D CMAKE_INSTALL_PREFIX=/usr/local \
-D INSTALL_PYTHON_EXAMPLES=ON \
-D INSTALL_C_EXAMPLES=OFF \
-D OPENCV_EXTRA_MODULES_PATH=~/opencv_contrib-3.1.0/modules \
-D PYTHON_EXECUTABLE=~/.virtualenvs/cv3/bin/python \
-D BUILD_EXAMPLES=ON ..
PS:倒数第二行-D PYTHON_EXECUTABLE=~/.virtualenvs/cv3/bin/python \
中的cv3
一定要和mkvirtualenv cv3 -p python3
中的你设置的名字cv3
一致。如我想在keras
虚拟环境中编译,我需要改成-D PYTHON_EXECUTABLE=~/.virtualenvs/keras/bin/python \
。此处一定要注意。
编译结束之后。你会看到屏幕上会输出如下图的内容。
每行括号内显示的是(ver 3.5.2)
,那对于python2.7.12的虚拟环境来说,显示的将会是(ver 2.7.12)
。如果你的输出如上图所示,继续进行编译。继续在build
文件夹下执行:
make (可以加上-j4或者是-j8,根据你GPU的核数定,也可以不加)
在make
成功之后,执行下面的命令:
$sudo make install
$sudo ldconfig
Step5: 创建链接,opencv安装完成
在完成sudo make install
之后,opencv+python的捆绑文件将会在/usr/local/lib/python3.5/site-packages/
文件夹下。用下面命令验证:
$ls -l /usr/local/lib/python3.5/site-packages/
如果显示如下结果,说明已经安装成功。
total 1972
-rw-r–r– 1 root staff 2016816 Sep 13 17:24 cv2.cpython-35m-x86_64-linux-gnu.so
PS:我是在python3.5的虚拟环境下安装的,所以安装完成后的文件会在/usr/local/lib/python3.5/site-packages/
文件夹下,如果你在python2.7.12的虚拟环境下安装的,去/usr/local/lib/python2.7/site-packages/
文件夹下。
修改cv2.cpython-35m-x86_64-linux-gnu.so
名字
$cd /usr/local/lib/python3.5/site-packages/
$sudo mv cv2.cpython-35m-x86_64-linux-gnu.so cv2.so
在对cv2.cpython-35m-x86_64-linux-gnu.so
重命名之后,我们将opencv的捆绑文件sym-link到Python的虚拟环境中去。
$cd ~/.virtualenvs/cv/lib/python3.5/site-packages/
$ln -s /usr/local/lib/python3.5/site-packages/cv2.so cv2.so
Step6: 测试OpenCV
打开一个新的终端(Terminal),切换到安装OpenCV的Python虚拟环境中。
Ctrl+Alt+T
$workon cv3
$python
>>>import cv2
>>>cv2.version
如果得到如下图所示的结果,恭喜你,你已经成功的在Python的虚拟环境中安装好了OpenCV3.1.0。
至此,已经成功的在Ubuntu16.04上安装了OpenCV3.1.0。可以开始你的OpenCV和Python的学习之旅了。
安装过程中可能会遇到的问题
在执行make
命令的时候,可能会在进度的60%左右出现一个错误:
error: ‘NppiGraphcutState’ has not been declared
…
modules/cudalegacy/CMakeFiles/opencv_cudalegacy.dir/build.make:290: recipe for target ‘modules/cudalegacy/CMakeFiles/opencv_cudalegacy.dir/src/graphcuts.cpp.o’ failed
make[2]: *** [modules/cudalegacy/CMakeFiles/opencv_cudalegacy.dir/src/graphcuts.cpp.o] Error
原因: GraphCut 在cuda7.5中弃用,而且在cuda8.0中移除了。
解决办法:修改 ~/opencv-3.1.0/modules/cudalegacy/src/graphcuts.cpp
文件
把第45
行修改成:
#if !defined (HAVE_CUDA) || defined (CUDA_DISABLER) || (CUDART_VERSION >= 8000)
即在 \#if !defined (HAVE_CUDA) || defined (CUDA_DISABLER)
加上 || (CUDART_VERSION >= 8000)
执行make
时,会在80%左右出现 :
fatal error: hdf5.h: No such file or directory
opencv_contrib-3.1.0/modules/hdf/include/opencv2/hdf/hdf5.hpp:40:18: fatal error: hdf5.h: No such file or directory
原因:找不到hdf5.h的路径
解决办法:在opencv_contrib-3.1.0/modules/hdf/include/opencv2/hdf/hdf5.hpp 文件中修改第40行
将#include
修改成#include "/usr/include/hdf5/serial/hdf5.h"
PS:每次修改文件后可直接执行make
命令,不需要执行make clean
。因为执行make clean
后会重新从头编译,那样会浪费时间。