环境: Ubuntu 16.04 64bit ,openCV 3.2.0
1.安装opencv依赖包
GCC 4.4.x or later
CMake 2.6 or higher
Git
GTK+2.x or higher, including headers (libgtk2.0-dev) # 控制opencv GUI
pkg-config
Python 2.6 or later and Numpy 1.5 or later with developer packages (python-dev, python-numpy)
ffmpeg or libav development packages: libavcodec-dev, libavformat-dev, libswscale-dev
[optional] libtbb2 libtbb-dev
[optional] libdc1394 2.x
[optional] libjpeg-dev, libpng-dev, libtiff-dev, libjasper-dev, libdc1394-22-dev
命令如下:
$ sudo apt-get install build-essential
$ sudo apt-get install cmake git libgtk2.0-dev pkg-config libavcodec-dev libavformat-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 # 处理图像所需的包
$ sudo apt-get install libavcodec-dev libavformat-dev libswscale-dev libv4l-dev
$ sudo apt-get install libxvidcore-dev libx264-dev # 处理视频所需的包
$ sudo apt-get install libatlas-base-dev gfortran # 优化opencv功能
$ sudo apt-get install ffmpeg
2.下载opencv3.2.0
这里需要下载opencv和opencv_contrib(后者会在cmake配置的时候用到),这是因为opencv3以后SIFT和SURF之类的属性被移到了contrib中。
$ wget https://github.com/opencv/opencv/archive/3.2.0.zip # 从github上直接下载或者clone也可
$ wget https://github.com/opencv/opencv_contrib/archive/3.2.0.zip
3.安装opencv3.2.0
$ cd opencv3.2.0
$ mkdir build
$ cd build
$ cmake -D CMAKE_BUILD_TYPE=Release -D CMAKE_INSTALL_PREFIX=/usr/local ..
CMAKE_INSTALL_PREFIX:安装的python目录前缀,指定了python模块的安装路径:CMAKE_INSTALL_PREFIX/lib/python2.7/dist-packages,获取该路径的方式可以用:
python -c "import sys; print sys.prefix"
在安装过程中,很有可能会出现错误:ICV: Downloading ippicv_linux_20151201.tgz 超时,据说此部分可有可无,可自行搜索文件名进行下载,然后替换opencv-3.2.0/3rdparty/ippicv/downloads/linux-*目录下的同名文件,重新cmake。
optional(显示指定一些编译内容),我在安装时未显示指定:
cmake -D CMAKE_BUILD_TYPE=Release -D CMAKE_INSTALL_PREFIX=/usr/local WITH_TBB=ON -D BUILD_NEW_PYTHON_SUPPORT=ON -D WITH_V4L=ON -D INSTALL_C_EXAMPLES=ON -D INSTALL_PYTHON_EXAMPLES=ON -D BUILD_EXAMPLES=ON -D WITH_QT=ON -D WITH_OPENGL=ON -D ENABLE_FAST_MATH=1 -D WITH_CUDA=ON -D CUDA_FAST_MATH=1 -D WITH_CUBLAS=1 -D CUDA_GENERATION=Auto -D WITH_GSTREAMER_0_10=OFF ..
在build目录下:
$ make -j4
-j4表示四核运算,可根据电脑配置选择。
然后
$ sudo make install
后续使用可能存在的问题:
1.会有在make -j4遇到G++版本太高的问题。
修改opencv-3.2.0目录下的CMakeList.txt文件,在开头加入set(CMAKE_CXX_FLAGS “${CMAKE_CXX_FLAGS} -D_FORCE_INLINES”)然后重新cmake,再make -j4,再make install
2.如遇到‘NppiGraphcutState’ has not been declared,是opencv与cuda8.0不兼容导致的。之前的opencv版本都会有问题,opencv2.4.13没有问题,这是唯一一个2016年发布的版本。解决方法:
在path/to/opencv/modules/cudalegacy/src/graphcuts.cpp中,把
#if !defined (HAVE_CUDA) || defined (CUDA_DISABLER)
改为
#if !defined (HAVE_CUDA) || defined (CUDA_DISABLER) || (CUDART_VERSION>=8000)
参考:Ubuntu16.04+CUDA8.0+caffe配置
3.设置Shared Library
另外在之后的使用中可能会出现找不到库的情况,这是因为没有把库放到一个能找到的位置。
该部分参考:openCV program compile error “libopencv_core.so.2.4: cannot open shared object file: No such file or directory” in ubuntu 12.04
在/usr/local目录下查找opencv库所在位置,有的是在/usr/local/opencv和/usr/local/opencv2下面,有的是在/usr/local/lib下找到的。如果找不到,可尝试:
sudo updatedb && locate libopencv_core.so.3.2
3.2为版本号。
新建文件:
sudo vim /etc/ld.so.conf.d/opencv.conf
写入地址/usr/local/lib,并保存。
更新:
sudo ldconfig -v