ubuntu下带CUDA的OpenCV安装

在使用OpenCV中,有时候可能会用到其中的 gpu 加速功能,那么就需要安装CUDA,并从源码编译的角度重新编译安装OpenCV。下面介绍详细的安装过程。

1. 安装CUDA

参考网址:https://github.com/facebook/fbcunn/blob/master/INSTALL.md

2. 安装需要的依赖包

sudo apt-get update

sudo apt-get install libopencv-dev build-essential checkinstall cmake pkg-config yasm libtiff4-dev libjpeg-dev libjasper-dev libavcodec-dev libavformat-dev libswscale-dev libdc1394-22-dev libxine-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

sudo add-apt-repository ppa:jon-severinsson/ffmpeg  
sudo apt-get update  
sudo apt-get install ffmpeg  
sudo apt-get install frei0r-plugins

注:在上面那步“sudo add-apt-repository ppa:jon-severinsson/ffmpeg ”中,可能会报错,ffmpeg安装不成功,可以采用如下方式安装:
(1)进入如下网址,下载“static build“形式的ffmpeg文件
https://trac.ffmpeg.org/wiki/CompilationGuide/Ubuntu
(2)将ffmpeg下载下来后,打开里面的INSTALL.md文件,上面有详细的安装过程。

3. 从git上获取OpenCV源码

mkdir OpenCV  
cd OpenCV  
git clone https://github.com/Itseez/opencv.git 

如果不确定opencv所使用的版本,如下网址提供了opencv2.4.13和opencv 3.x的源码:
https://github.com/opencv/opencv/releases

4. 编译并安装OpenCV

cd opencv  
mkdir release  
cd release  
cmake -D CMAKE_BUILD_TYPE=RELEASE -D CMAKE_INSTALL_PREFIX=/usr/local -D 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 CUDA_FAST_MATH=1 -D WITH_CUBLAS=1 ..

在这里遇到一个错误,那个qt5-default 死活安装不上,后来我把这个选项去掉了:-D WITH_QT=ON, 然后再重新执行上面的那个命令。成功。去掉“-D WITH_QT=ON”并不影响后面OpenCV的gpu模块使用。

在此处编译opencv时,可能还会遇到如下错误

libopencv_highgui.so.2.4: undefined reference to TIFFRGBaimageOK@LIBTIFF_4.0' 1> 
libopencv_highgui.so.2.4: undefined reference toTIFFReadRGBAStrip@LIBTIFF_4.0'

解决办法:
由于OpenCV需要libtiff4库支持,因此在cmake 编译OpenCV时,需要添加: -D BUILD_TIFF=ON
便会自动编译libtiff4。这样便可。

5. 检查CUDA和CUBLAS是否开启

-- Use Cuda: YES (ver 6.5) -- Use OpenCL: YES -- -- NVIDIA CUDA -- Use CUFFT: YES -- Use CUBLAS: YES -- USE NVCUVID: NO -- NVIDIA GPU arch: 11 12 13 20 21 30 35 -- NVIDIA PTX archs: 30 -- Use fast math: YES

如果上面正常,则进行下面的:

6. 安装OpenCV

make  
sudo make install

注:源码安装时间会很长很长,建议在睡觉前装。第二天醒来后再看是否安装好了。

7. 配置库搜索路径

在~/.bashrc 文件中,加入:

PKG_CONfig_PATH=/usr/local/lib/pkgconfig
export PKG_CONfig_PATH

保存并退出

8. 测试自已安装的版本

pkg-config –modversion opencv

如果输出自已安装的OpenCV版本,如2.4.13,说明OK啦。

9.OpenCV路径问题

由于在在上述第4步时,cmake有一个编译选项,-D CMAKE_INSTALL_PREFIX=/usr/local,所以安装完成后,发现在python环境中导入不了cv2,即“import cv2”会报错。
原因:opencv安装的路径不对。
解决办法:
可以发现,在路径/usr/local/lib/python2.7/site-packages下面,有2个文件

cv2.so
cv.py

可以将这两个文件拷贝到你安装的python的site-packages下面。如我使用的是anaconda,则我将这两个文件拷贝到如下路径:~/anaconda2/lib/python2.7/site-packages。执行命令:

cp /usr/local/lib/python2.7/site-packages/cv* ~/anaconda2/lib/python2.7/site-packages/

这样在自已的python环境中就可导入cv2了。

10.OpenCV卸载

(1)如果知道当时编译的文件夹位置,如release,那么直接今日该目录,执行:

make uninstall

(2)如果不知到当时编译的文件夹位置,那么执行:

sudo find / -name "*opencv*" -exec rm -i {} \;

或者:

sudo apt-get autoremove opencv-doc opencv-data libopencv-dev libopencv2.4-java libopencv2.4-jni python-opencv libopencv-core2.4 libopencv-gpu2.4 libopencv-ts2.4 libopencv-photo2.4 libopencv-contrib2.4 libopencv-imgproc2.4 libopencv-superres2.4 libopencv-stitching2.4 libopencv-ocl2.4 libopencv-legacy2.4 libopencv-ml2.4 libopencv-video2.4 libopencv-videostab2.4 libopencv-objdetect2.4 libopencv-calib3d2.4

参考网址

(1)http://blog.aicry.com/ubuntu-14-04-install-opencv-with-cuda/
(2)http://boywhy.blogspot.hk/2014/12/raspberry-pi-raspberry-pi-opencvwebcam.html
(3)http://www.ozbotz.org/opencv-installation/   ---opencv安装时,需要预先安装一些依赖库
(4)https://askubuntu.com/questions/564290/how-to-uninstall-opencv-2-4-9-completely-from-ubuntu ---opencv卸载

相关文章

目录前言一、创建Hadoop用户二、更新apt和安装Vim编辑器三、...
原文连接:https://www.cnblogs.com/yasmi/p/5192694.html ...
电脑重启后,打开VirtualBox,发现一直用的虚拟机莫名的消失...
参见:https://blog.csdn.net/weixin_38883338/article/deta...
Ubuntu 18.04 LTS 已切换到 Netplan 来配置网络接口。Netpla...
介绍每个 Web 服务都可以通过特定的 URL 在 Internet 上访问...