本帖记录在Ubuntu 16.04上安装OpenCV的步骤,并分别安装Python 2和Python 3的绑定。如果你只用C++接口,可以忽略Python的安装。
Ubuntu 16.04系统默认安装了两个Python版本:Python2核Python3,默认的版本还是Python2。本帖安装的OpenCV同时支持这两个版本。
#1 安装OpenCV依赖
升级系统:
1 2 |
$ sudo apt-get update $ sudo apt-get upgrade |
安装基本编译工具:
1 |
$ sudo apt-get install build-essential cmake pkg-config |
由于OpenCV是计算机视觉库,总需要加载一些图像文件( JPEG, PNG, TIFF)。使用下面命令安装一些必要的图像库:
1 |
$ sudo apt-get install libjpeg8-dev libtiff5-dev libjasper-dev libpng12-dev |
除了图片之外,OpenCV还要处理视频文件。使用下面命令安装一些视频编解码库:
1 2 |
$ 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库:
1 |
$ sudo apt-get install libgtk-3-dev |
下面安装一些可以提高OpenCV性能的库,如矩阵操作:
1 |
$ sudo apt-get install libatlas-base-dev gfortran |
安装Python2和Python3的开发库:
1 |
$ sudo apt-get install python2.7-dev python3.5-dev |
#2 下载OpenCV源码
目前OpenCV的最新稳定版是3.1.0,你可以去Github OpenCV项目主页查看最新版本。
1 2 3 |
$ cd ~ $ wget -O opencv.zip https://github.com/Itseez/opencv/archive/3.1.0.zip $ unzip opencv.zip |
下载和OpenCV版本对应的opencv_contrib(一些扩展功能和non-free代码):
1 2 |
$ wget -O opencv_contrib.zip https://github.com/Itseez/opencv_contrib/archive/3.1.0.zip $ unzip opencv_contrib.zip |
注意:opencv和opencv_contrib的版本要一致。
#3 创建Python虚拟环境
虚拟环境可以保持Python开发环境的干净整洁,强烈建议使用虚拟环境。
首先安装pip:
1 2 3 |
$ wget https://bootstrap.pypa.io/get-pip.py $ sudo python get-pip.py $ rm get-pip.py |
安装virtualenv:
1 |
$ sudo pip install virtualenv virtualenvwrapper |
在~/.bashrc文件中添加如下环境变量:
1 2 |
export WORKON_HOME=$HOME/.virtualenvs source /usr/local/bin/virtualenvwrapper.sh |
使环境变量生效:
1 |
$ source ~/.bashrc |
创建Python虚拟环境:
1 2 |
$ mkvirtualenv cv2 -p python2 # python 2 $ mkvirtualenv cv3 -p python3 # python 3 |
切换工作目录:
1 |
$ workon cv2/cv3 |
分别在cv2、cv3虚拟环境安装numpy:
1 |
$ pip install numpy |
#4 编译OpenCV
激活要安装的Python虚拟环境:
1 |
$ workon cv[2/3] # Python2->cv2 Python3->cv3 |
编辑OpenCV:
1 2 3 4 5 6 7 8 9 10 |
$ 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/cv[2/3]/bin/python \ # 使用cv2或cv3替换cv[2/3] -D BUILD_EXAMPLES=ON .. # 我在编译例子时遇到错误,把它改为OFF通过 |
编译:
1 |
$ make |
安装:
1 2 |
$ sudo make install $ sudo ldconfig |
#5 完成OpenCV的安装
Python 2.7:
OpenCV模块位于/usr/local/lib/python-2.7/site-packages/
目录。
创建链接:
1 2 |
$ cd ~/.virtualenvs/cv2/lib/python2.7/site-packages/ $ ln -s /usr/local/lib/python2.7/site-packages/cv2.so cv2.so |
Python 3.5:
OpenCV模块位于/usr/local/lib/python3.5/site-packages/
目录。
为Python3编译的模块名字不是cv.so,而是cv2.cpython-35m-x86_64-linux-gnu.so,系统不同名字也不同。重命名:
1 2 |
$ cd /usr/local/lib/python3.5/site-packages/ $ sudo mv cv2.cpython-35m-x86_64-linux-gnu.so cv2.so |
创建链接:
1 2 |
$ cd ~/.virtualenvs/cv/lib/python3.5/site-packages/ $ ln -s /usr/local/lib/python3.5/site-packages/cv2.so cv2.so |
测试安装:
1 2 3 4 5 6 7 8 9 10 |
$ cd ~ $ workon cv3/cv2 $ python Python 3.5.2 (default, Jul 5 2016, 12:43:10) [GCC 5.4.0 20160609] on linux Type "help", "copyright", "credits" or "license" for more information. >>> import cv2 >>> cv2.__version__ '3.1.0' >>> |
安装完成。
我在编译OpenCV时遇到的错误(BUILD_EXAMPLES=OFF):
1 2 3 4 5 6 7 8 9 10 |
[ 82%] Linking CXX executable ../../bin/cpp-example-stereo_match /usr/lib/gcc/x86_64-linux-gnu/5/../../../x86_64-linux-gnu/crt1.o: In function `_start': (.text+0x20): undefined reference to `main' collect2: error: ld returned 1 exit status samples/cpp/CMakeFiles/example_stereo_match.dir/build.make:135: recipe for target 'bin/cpp-example-stereo_match' failed make[2]: *** [bin/cpp-example-stereo_match] Error 1 CMakeFiles/Makefile2:20549: recipe for target 'samples/cpp/CMakeFiles/example_stereo_match.dir/all' failed make[1]: *** [samples/cpp/CMakeFiles/example_stereo_match.dir/all] Error 2 Makefile:160: recipe for target 'all' failed make: *** [all] Error 2 |
其它安装OpenCV的方法
1)安装Ubuntu默认仓库中的OpenCV:
1 |
$ sudo apt install libopencv-dev python-opencv |
版本旧,不支持Python3。
2)使用OpenCV安装脚本:
1 2 |
$ wget https://github.com/milq/scripts-ubuntu-debian/blob/master/install-opencv.sh $ bash install-opencv.sh |
默认的只在python2.7下的site-packages存在cv2.so文件,3.5中没有的
您好,我再Ubuntu16.04上安装opencv3.2.0,按照这个流程。
根本没有/usr/local/lib/python3.5/site-packages/目录。
python3.5下只有一个dist-packages目录。
您碰到过这个问题么,怎么解决?
site-packages 是在你下载的源码的路径里,不一定是”/usr/local/lib/python3.5″,比如,我把源码下载到了”/home/opencv-3.1.0″,那就在”/home/opencv-3.1.0/lib/python3.5/site-packages/”里找”cv2.so”
你好,在ubuntu16.0.4上安装opencv3.2.0时,/usr/local/lib/python3.5/site-packages/目录下没有cv2.so文件
同学,你这个问题解决了吗,我之前也是没有cv2.so文件,是因为make的过程中报错:
fatal error hdf5.h no such file or directory
然后我在google上找到了解决方法,链接如下,仅供参考:
https://github.com/opencv/opencv/issues/6016
请问你的问题解决了吗?我编译什么的都没有报错,但是在python2.7/site-packages/下就是没有cv2.so文件
有相同的问题!!
请问你后来解决了么?怎么解决的?
感谢大佬!
我在3.5下编译通过,没有报错,同样没有找到 cv2.cpython-35m-x86_64-linux-gnu.so ,搜索解决了好久,没能解决,求帮忙,感谢
同学,请问你现在解决了吗,我也遇到了你的问题,求帮忙,非常感谢