Linux Ubuntu16.04 Opencv3(+CUDA9.0)安装记录

Linux Ubuntu OPENCV3.2-3.4版本(带CUDA)安装记录

记录一下自己之前在安装opencv过程中出现的一些问题。
环境:Linux Ubuntu16.04+CUDA9.0

1. 依赖项

下面是opencv安装的一些依赖。虽然根据自己装的过程发现其中有几条并非必要的,不过全装上肯定没什么大的问题。1

	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 
	sudo apt-get install 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 liblapacke-dev
	sudo apt-get install libxvidcore-dev libx264-dev  #视频处理的依赖
	sudo apt-get install libatlas-base-dev gfortran  #atlas的lib,应该是优化用的
	sudo apt-get install ffmpeg

2. OPENCV3下载

官网的下载链接,可以根据自己的需要选择版本:

https://www.opencv.org/releases.html

3. 安装过程及问题

a. 安装

虽然本人一直是右键Extract Here搞定的,不过还是记一下:

		unzip opencv-3.*.*.zip

这就意味着在前面配依赖的时候还要加一个:

		sudo apt-get install unzip

不过这个可能是Ubuntu自带的吧??(并没注意过)

然后就是进入解压后的文件夹,进行下面的操作

	cd opencv-3.*.*.zip
	mkdir build
	cd build
	cmake .. 

上述的是完全按照默认配置安装,在我自己的电脑上安装opencv3.4.2直接按照默认配置恰好没什么问题。下面给出cmake过程中的比较详细的编译属性配置1

	cmake -D CMAKE_BUILD_TYPE=RELEASE \ 
    -D CMAKE_INSTALL_PREFIX=/usr/local \ #指定路径
    -D INSTALL_PYTHON_EXAMPLES=ON \ #是否安装python的Examples
    -D INSTALL_C_EXAMPLES=OFF \  
    -D OPENCV_EXTRA_MODULES_PATH=~/opencv_contrib-3.2.0/modules \ 
    -D PYTHON_EXCUTABLE=/usr/bin/python \
    -D WITH_CUDA=ON \    # 使用CUDA,如果不是非常需要GPU或者没有CUDA,关掉这个就可以解决CUDA_nppi_LIBRARY的问题。
    -D WITH_CUBLAS=ON \ #和上面保持一致就好
    -D DCUDA_NVCC_FLAGS="-D_FORCE_INLINES" \
    -D CUDA_ARCH_BIN="5.3" \    # 指定Compute Capability算力,对应的算力值需要根据自己的显卡型号到官网上查询:(https://developer.nvidia.com/cuda-gpus)
    -D CUDA_ARCH_PTX="" \
    -D CUDA_FAST_MATH=ON \    # 计算速度更快但是相对不精确
    -D WITH_TBB=ON \
    -D WITH_V4L=ON \
    -D WITH_QT=ON \    # 如果qt未安装可以删去此行;若因为未正确安装qt导致的Qt5Gui报错,可将build内文件全部删除后重新cmake,具体可以参考[这里](http://stackoverflow.com/questions/17420739/opencv-2-4-5-and-qt5-error-s)
    -D WITH_GTK=ON \
    -D WITH_OPENGL=ON \
    -D CUDA_GENERATION=Kepler \ #这里是指定CUDA版本,opencv3.2默认支持CUDA8.0,改成9.0就好了
    -D BUILD_EXAMPLES=ON ..

根据上述详细配置来进行编译,可以避免包括上述问题在内的很多问题,一般来说不关键的缺省就可以了。
接下来就是编译和安装

	 make -j8 #-j8指多核编译,根据电脑配置选择数字,不加的话可能会比较慢吧
	 sudo make install

经过漫长的等待,就安装好了。

b. 出现的一些问题

a) 下载ippicv时卡住

IPPICV下载不下来

cmake的时候会卡在这里,根据经验即便等上一两个小时可能也不会动的。那么就不要等了,把他要的文件手动下载下来就好了。下面这个网址是不需要花费什么币的,虽然有时候速度也很感人:https://github.com/opencv/opencv_3rdparty 。可以在Branch里面找到对应的版本,在ippicv文件夹里下载对应的tgz文件就可以啦。

对于opencv3.2,该tgz会放在 ~/opencv-3.2.0/3rdparty/ippicv/downloads/linux-808b791a6eac9ed78d32a7666804320e 里面,我们要做的就是把手动下载下来的tgz放在这个目录下。

而opencv3.3和3.4这些版本就没这么友好了,这事我们只需要Ctrl+F 搜索并打开 ippicv.cmake 将第47行的
Website改为tgz包的下载根目录,如: ”/home/xxxx/download/" 就可以了。

b) 编译时出现CMake Error: CUDA_nppi_LIBRARY (ADVANCED)

出现这一问题是因为OPENCV3.2还未支持CUDA9.0,同样的问题在OPENCV2编译时也会出现。有效的解决方案请见:
https://blog.csdn.net/u014613745/article/details/78310916

c) 编译时出现Unsupported gpu architecture ‘compute_20’

问题出在CMake的命令里,如果缺省或直接采用默认架构即Fermi就会出现上述问题,这也是因为版本不匹配。根据上面CMake的详细介绍,更改当前CUDA版本:

 	-D CUDA_GENERATION=Kepler

或者直接指定算力

	 -D CUDA_ARCH_BIN="5.3"

应该都可以解决这一问题。

4.最后配置OPENCV的编译环境

虽然我在应用的过程中好像并没需要这一步,不过为了避免将来会出现一些奇怪的错误,我还是把这步写到这里。2

配置路径

	sudo gedit /etc/ld.so.conf.d/opencv.conf 
	#打开文件opencv.conf,可能是个空文件在文件中添加路径:
	/usr/local/lib #添加到文件里的,不是代码

更新系统库

	sudo ldconfig 

添加外部变量

	sudo gedit /etc/bash.bashrc 
	#在末尾添加:
	PKG_CONFIG_PATH=$PKG_CONFIG_PATH:/usr/local/lib/pkgconfig  
	export PKG_CONFIG_PATH  

激活配置然后更新database

	source /etc/bash.bashrc
	sudo updatedb

完成

萌新第一次发文。如果有什么错误之处,万望大家前来指正。另外参考了一些其他大佬的文章,如果有侵权之处还请联系我删除。


  1. https://www.cnblogs.com/arkenstone/p/6490017.html ↩︎ ↩︎

  2. https://blog.csdn.net/u013066730/article/details/79411767 ↩︎

  • 4
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值