Linux系统编译CUDA版的OpenCV4.2

前言:opencv4.2版本19年12月发布,其最重要的改变是增加了对DNN模块Cuda加速,使得深度学习调用DNN接口可以获取GPU的加速。但opencv4.2版本中DNN的加速模块放在了opencv_ contrib中,因此要使用opencv4.2进行cuda加速,就必须联合编译opencv_contrib,联合编译opencv_contrib与往期版本步骤类似,但opencv4.2在联合编译的过程出现了许多坑,本文记录了opencv4.2联合编译contrib过程中遇到的问题,并给出了解决方案,以防自己再次踩坑,也给需要的人提供一些参考。

目录

1.编译cmake

2. 安装依赖库

3. 配置编译选项

4. 执行编译,安装

5. opencv4.2使用中的问题

1. c++11标准的支持

2. cuda支持


编译安装环境:ubuntu16.04+g++5.4.0+cmake3.6.0

1.编译cmake

之前写过一篇文章《cmake安装》,可以参考下。

除了cmake之外我不知道还有没有其他的编译方式,但官方源码既然给出了cmakelist.txt文件,肯定也是推荐用cmake方式编译的。

2. 安装依赖库

在正式开始安装前,先安装opencv相关的一些依赖库,这些依赖库不安装,可能导致安装不成功,建议先下载安装:

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

3. 配置编译选项

opencv4.2版的opencv-dnn加速是在opencv_contirb实现的,因此必须联合编译opencv_contirb,

(1)下载opencv4.2与opencv4.2版的opencv_contrib,分别解压,将opencv_contrib放在opencv解压后的文件夹内,如下图所示:

(2)配置编译选项

mkdir build
cd build
cmake -DCMAKE_BUILD_TYPE=RELEASE \
    -DCMAKE_INSTALL_PREFIX=/usr/local \
    -DOPENCV_EXTRA_MODULES_PATH=../opencv_contrib4.2.0/modules .. \
    -DWITH_CUDA=1 \
    -DWITH_CUDNN=ON \
    -DOPENCV_DNN_CUDA=ON \
    -DENABLE_FAST_MATH=ON \
    -DCUDA_FAST_MATH=ON \
    -DWITH_CUBLAS=1 \
    -DOPENCV_GENERATE_PKGCONFIG=1 \
    -DCUDA_GENERATION=Pascal ..

这一步非常重要!配置错了,编译结果可能就不是你想要的,后面的编译过程很长,所以这一步非常重要。

配置注意点:

  • 每个换行符后面不能有空格;
  • GPU显卡类型要正确,我用的是TX2平台,是pascal架构的GPU;
  • 关于EXAMPLE选项的编译,很多文章都有编译,我之前编译过一次,出错了,是"samples\gpu\surf_keypoint_matcher.cpp"文件编译出错了,错误是找不到cv::cuda::SURF_CUDA(),这还不是contirb中的代码,这让我很纳闷。不知道有没有同行遇到过。

4. 执行编译,安装

配置完成后,执行编译命令编译命令:"sudo make -j1",我比较推荐单线程,虽慢但稳。

在编译过程会出现一些问题,问题都出现在opencv_contirb中,来看第一个问题,见下图:

缺少boostdesc_bgm.i这个文件,下面链接百度云盘下载这个文件后,放入到"..\modules\xfeatures2d\src"目录下,继续编译。(注:下载的所有文件都需要拷贝,以下文件都需要。)

百度云资料:百度网盘 请输入提取码,密码:z7dp

boostdesc_bgm.i
boostdesc_bgm_bi.i
boostdesc_bgm_hd.i
boostdesc_lbgm.i
boostdesc_binboost_064.i
boostdesc_binboost_128.i
boostdesc_binboost_256.i
vgg_generated_120.i
vgg_generated_64.i
vgg_generated_80.i
vgg_generated_48.i

继续编译不需要重开终端,在已开终端里直接"sudo make -j1"即可,编译过程会跳过刚才编译完成的部分。

第二个问题如下图,在目录"..\modules\xfeatures2d\test"下找不到某个hpp文件

这个hpp文件在"..\modules\features2d\test"文件下有,直接拷贝到"..\modules\xfeatures2d\test"目录下,然后修改"modules\xfeatures2d\test\test_features2d.cpp"文件中第51行,修改为如下图形式:

继续编译,然后接下来还会遇到一个缺少头文件的问题,同样在"..\modules\features2d\test"目录下能找到该头文件,将头文件复制到"..\modules\xfeatures2d\test"目录下,再修改对应的文件,再继续编译,接下来就没有任何问题了。

等待编译结束后,执行命令安装库文件:

sudo make install

5. opencv4.2使用中的问题

1. c++11标准的支持

opencv4.2在使用时候需要c++11标准的支持,一般linux系统上的g++,gcc版本都不是默认c++11标准的,默认为c++98标准的,如果你的程序在编译过程中出现如下错误,则说明你的编译器默认不是c++11标准。

opencv4.x+ requires enabled c++11 support

因此要使用opencv4.2版本需要显式的开启c++11标准,在编译源码时候必须加上”-std=c++11”。

举例makefile文件:

修改前:

修改后(红色框):

2. cuda支持

如果你的应用程序运行如出现下图的提示信息,则说明你的opencv中并没有把cuda编译进去,可能需要你重新编译了,建议排查下编译的配置项。


各位如需opencv4.2修改过的opencv_contrib欢迎下载我的资源《修改好的opencv4.2及opencv_contrib

评论 14
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

三月微暖寻春笋

赠人玫瑰手有余香

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值