系统:Ubuntu16.04server
CUDA版本:CUDA8.0
Python版本:Python3.5.2
OpenCV版本:OpenCV3.1.0
必备项:
sudo apt-get install build-essential cmake git libgtk2.0-dev pkg-config libavcodec-dev libavformat-dev libswscale-dev numpy
sudo apt-get install python3.5-dev
可选项:
sudo apt-get install checkinstall yasm libtiff5-dev libjpeg-dev libjasper-dev libdc1394-22-dev libxine2-dev libgstreamer0.10-dev libgstreamer-plugins-base0.10-dev libv4l-dev python-dev python-numpy libtbb-dev libqt4-dev libgtk2.0-dev libfaac-dev libmp3lame-dev libopencore-amrnb-dev libopencore-amrwb-dev libtheora-dev libvorbis-dev libxvidcore-dev x264 v4l-utils libeigen3-dev
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
sudo apt-get install libgtk-3-dev
sudo apt-get install libatlas-base-dev gfortran
注:libgtk-3-dev是OpenCV GUI操作所依赖的库,对于服务器版本来说没有必要安装。
切换到家目录,使用wget指令下载OpenCV资源。
cd ~
wget -O opencv.zip https://github.com/Itseez/opencv/archive/3.1.0.zip
unzip opencv.zip
wget -O opencv_contrib.zip https://github.com/Itseez/opencv_contrib/archive/3.1.0.zip
unzip opencv_contrib.zip
两个压缩包的名字分别为opencv.zip和opencv_contrib.zip,解压缩后为opencv-3.1.0 opencv_contrib-3.1.0。opencv_contrib3.1.0包含OpenCV的SIFT和SURF功能。在OpenCV 2.4中,SIFT和SURF被包含在OpenCV的默认安装中。 然而,随着OpenCV3的发布,这些软件包已被转移到contrib中。所以完整的OpenCV安装需要编译这两个文件。(注:执行该指令需先安装unzip包)。
建立一个编译目录,把cmake后的文件都放在这里,路径为:~/opencv-3.1.0/build
cd ~/opencv-3.1.0/
mkdir build
cd build
然后在该目录下Cmake,这里需要注意几个比较重要的参数,比较重要。
cmake -D CMAKE_BUILD_TYPE=RELEASE -D CMAKE_INSTALL_PREFIX=/usr/local -D OPENCV_EXTRA_MODULES_PATH=~/opencv_contrib-3.1.0/modules ..
注:命令中最后的" .. "(空格+两个点)千万不要忘记。
CMake是一个跨平台的安装(编译)工具,可以用简单的语句来描述所有平台的安装(编译过程)。他能够输出各种各样的makefile或者project文件。其中 CMAKE_BUILD_TYPE=Release / Debug。OPENCV_EXTRA_MODULES_PATH 就是用来指定要编译的扩展模块,后边加上刚下载的opencv_contrib模块的路径即可。-D 相当于就是定义, -D 可以理解为告诉cmake 后边我要定义一些参数了, 你每定义一个就在前边加上-D就是了。
这里官方文档上还给出了其他一些参数,但是我没用过,这里就不再描述了。有需要的可以查看:http://docs.opencv.org/trunk/d7/d9f/tutorial_linux_install.html。
在此过程中,很有可能会出现错误:ICV: Downloading ippicv_linux_20151201.tgz 超时。解决方法就是网上下载该文件,下载完后替换opencv-3.1.0/3rdparty/ippicv/downloads/linux-*目录下的同名文件,重新cmake。
若Cmake后出现如下信息,Python3 包含Interpreter、Libraries、numpy和packages path,可以继续往下执行。(注:packages path接下来可能会用到)
在build目录下进行编译:
make -j4
make是一个命令工具,是一个解释makefile中指令的命令工具,它根据Makefile文件编译源代码、连接、生成目标文件、可执行文件。-j4表示四核并行编译。若在多核编译中报错,可以通过make clean来清理build文件从而改成单核编译,即make。编译时间比较长,请耐心等待。
安装Opencv并更新动态链接库
sudo make install
sudo ldconfig
基于Python2环境下安装OpenCV3.1.0可以很顺利的在Python环境中导入cv2包。但python3必须对cv2.cpython-35m-x86_64-linux-gnu.so文件进行修改才可以。
首先查找该文件的位置
locate cv2.cpython-35m-x86_64-linux-gnu.so
然后在该文件夹下执行
sudo mv cv2.cpython-35m-x86_64-linux-gnu.so cv2.so
修改文件名。注:若该文件没有位于/usr/local/lib/python3.5/dist-packages/下(系统自带Python的第三方库文件夹为dist-packages,手动安装的则为site-packages),需要再将该文件拷贝到该目录下,因为该目录下存放着安装在Python3下的各种包,也是它的搜索路径。然后即可Import cv2。
如果在编译过程中遇到报错(会产生一连串的错误),第一个错误提示信息为:....../graphcuts.cpp: 'NppiGraphcutState' has not been declared是opencv与cuda8.0不兼容导致的。解决方法为打开graphcuts.cpp文件把
#if !defined (HAVE_CUDA) || defined (CUDA_DISABLER)
改为
#if !defined (HAVE_CUDA) || defined (CUDA_DISABLER) || (CUDART_VERSION>=8000)
终端输入以下命令:
pkg-config --modversion opencv
或进入Python3环境
import cv2
cv2.__version__
即可。
参考文献:
https://www.pyimagesearch.com/2016/10/24/ubuntu-16-04-how-to-install-opencv/
https://blog.csdn.net/jhszh418762259/article/details/52957495
https://www.cnblogs.com/asmer-stone/p/5089764.html