1、安装依赖包
sudo apt-get update
sudo apt-get upgrade
sudo apt-get install build-essential
sudo apt-get install cmake git libgtk2.0-dev pkg-config libavcodec-dev libavformat-dev libswscale-dev libjpeg62-dev libtiff4-dev libswscale-dev
sudo apt-get install python-dev python-numpy libtbb2 libtbb-dev libjpeg-dev libpng-dev libtiff-dev libjasper-dev libdc1394-22-dev
2、下载
可以选择两种方法下载
(1)直接下载对应的release版本
opencv下载地址:https://github.com/opencv/opencv/releases
opencv_contrib下载地址:https://github.com/opencv/opencv_contrib/releases
(2)git clone
git clone https://github.com/opencv/opencv.git
cd opencv
git checkout 3.2.0
git pull
git clone https://github.com/opencv/opencv_contrib.git
cd opencv_contrib
git checkout 3.2.0
git pull
3、设置cmake编译参数
cd opencv
mkdir build
cd build
# 不带opencv_contrib的编译
cmake -D CMAKE_BUILD_TYPE=RELEASE -D CMAKE_INSTALL_PREFIX=/usr/local ..
# 或
# 不带opencv_contrib的编译
cmake -D CMAKE_BUILD_TYPE=RELEASE \
-D CMAKE_INSTALL_PREFIX=/usr/local \
-D INSTALL_C_EXAMPLES=OFF \
-D INSTALL_PYTHON_EXAMPLES=ON \
-D OPENCV_EXTRA_MODULES_PATH=../../opencv_contrib/modules \
-D BUILD_EXAMPLES=OFF \
-D WITH_LAPACK=OFF \
-D WITH_IPP=OFF ..
CMAKE_INSTALL_PREFIX:安装的python目录前缀,其实就是指定了python模块的安装路径:CMAKE_INSTALL_PREFIX/lib/python2.7/dist-packages。获取该路径的方式可以用python -c "import sys; print sys.prefix"
PYTHON_EXCUTABLE:指定python路径,在电脑上有多个版本的python时,可以通过该方式指定哪个python版本使用
OPENCV_EXTRA_MODULES_PATH: 指定opencv所需模块的路径,就是之前我们所说的contrib
注:
(1)ippicv的离线下载
安装Opencv的时候,停在了下载ippicv的地方,一直都下载不下来
ippicv是一个并行计算库,其实可以不用的。
如果不想用这个并行计算库,在做Cmake的时候用参数关闭即可,但我还是建议使用这个库。
首先,手动下载ippicv
然后,将刚才下载的ippicv文件直接拷贝进入opencv源码的下面这个目录:
opencv/3rdparty/ippicv/downloads/linux-808b791a6eac9ed78d32a7666804320e
(2)cuda与opencv兼容性问题
如果机器配置有GPU显卡,在需要编译支持CUDA的OpenCV库时,如果编译计算机已经安装了CUDA驱动程序,在利用CMake编译OpenCV时字段“WITH_CUDA”默认会被自动勾选上的。如果编译计算机未安装CUDA驱动程序和OpenCV运行时,CMake的字段“WITH_CUDA”默认就不会被自动勾选上。 因此在当cuda与opencv版本不兼容的话,会报cmake错误(目前发现主要是由于cuda9.0以上不支持opencv2.0架构,安装时候会报错)。当存在版本兼容性问题时候,可以简单粗暴的添加-D WITH_CUDA=OFF
命令来不使用CUDA加速即可,也可参照网上大神的解决方案https://blog.csdn.net/mundane_world/article/details/79786272,也可参考如下版本匹配参考来安装:
GPU的cuda与opencv版本匹配可以参考如下(本兼容版本只是个人验证版本,仅供参考):
CUDA | opencv |
---|---|
cuda8.0 | opencv3.2.0+opencv_contrib3.2.0 opencv3.3.0+opencv_contrib3.3.0 |
cuda9.0 | opencv3.4.3+opencv_contrib3.4.3 |
3、编译安装
可以通过nproc命令查看cpu位几个内核,如下面的8代表是八核的cpu,启动8个线程。
make -j8
sudo make install
sudo ldconfig
4、测试
通过查看 opencv 版本验证是否安装成功:
pkg-config --modversion opencv
5、conda中的其他python版本(不能跨大版本共享使用)使用已编译的opencv
上述编译安装时把opencv安装在以下目录中
/usr/local/lib/python2.7/site-packages
此时Ubuntu环境原生的python已经可以使用cv2了,但如果使用了conda版本管理器,还需要使用如下设置才可生效
cd ~/miniconda2/envs/py2/lib/python2.7/site-packages #conda默认python路径:~/miniconda2/lib/python2.7/site-packages
ln -s /usr/local/lib/python2.7/site-packages/cv2.so cv2.so
此时在conda的python中即可使用opencv和opencv_contrib了,在python中执行如下命令,如果无报错则可正常使用
import cv2
cv2.xfeatures2d.SIFT_create(nfeatures=500) #简单测试opencv_contrib是否安装成功!
=============================================================================
另一种快速安装方式
如果不想编译安装的话直接执行以下命令,同样能达到效果
#只安装opencv
pip install opencv-python
#同时安装opencv和opencv_contrib
pip install opencv-contrib-python
注:cv2依赖于numpy,如出现以下报错安装numpy即可
pip install numpy