1 如何在OpenCV中实现CUDA加速-德赢Vwin官网 网
0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

如何在OpenCV中实现CUDA加速

OpenCV学堂 来源:OpenCV学堂 作者:OpenCV学堂 2022-09-05 10:03 次阅读

OpenCV4.x+ CUDA概述

OpenCV4.x中关于CUDA加速的内容主要有两个部分,第一部分是之前OpenCV支持的图像处理与对象检测传统算法的CUDA加速;第二部分是OpenCV4.2版本之后开始支持的针对深度学习卷积神经网络模型的CUDA加速。这些内容都在OpenCV的扩展模块中,想要获取这OpenCV CUDA的支持,必须首先编译OpenCV CUDA相关的模块,这里主要是开展模块以CUDA开头的那些。此外编译的电脑或者PC必须有N卡(英伟达GPU卡),并且按照好了正确版本的驱动与cuDNN支持软件。本文分为两个部分来说明如何在OpenCV中实现CUDA加速,第一部分是实现CUDA支持版本OpenCV编译,第二部分是OpenCV CUDA SDK编程代码演示。

01

OpenCV+CUDA编译与配置

首先说一下系统与相关软件版本:

Window 10 x64

VS2015专业版

CMake 3.17.1

OpenCV4.4.0

OpenCV_contrib-4.4.0

CUDA10.0

cuDNN7.0

OpenCV4.4下载地址

https://github.com/opencv/opencv/releases/download/4.4.0/opencv-4.4.0-vc14_vc15.exe

OpenCV4.4扩展模块下载地址:

https://github.com/opencv/opencv_contrib/archive/4.4.0.zip

下载好OpenCV4.4极其扩展模块之后,我们就开始下面的编译步骤。

第一步:打开CMake,设置好下面的目录路径,注意源代码路径需要指向真实的OpenCV的source目录。图示如下:

a2c15fca-2c10-11ed-ba43-dac502259ad0.png

第一次运行,记得参数选择x64

a2d7e524-2c10-11ed-ba43-dac502259ad0.png

如果成功运行了config之后,请继续完成下面的设置。

第二步:设置扩展模块路径,勾选所有CUDA选项再次点击config

a2e97c30-2c10-11ed-ba43-dac502259ad0.png

a2f8be8e-2c10-11ed-ba43-dac502259ad0.png

点击config运行之后,再点击generate安装,如果一切OK即可完成CMake部分,下面就是到build的目录下:

D:opencv-4.4.0opencvcudabuild

双击打开OpenCV.sln工程文件,切换到release模型下,右键点击ALL_BUILD选择【生成….】运行完成,再次右键选择install,选择【生成…】这两次过程都会比较漫长,编译完成之后,就会得到intall目录,我们需要的就是它,其它都可以删掉了。这样我们就完成了OpenCV CUDA的编译。

注意点:

可能看我编译最多30分钟完成这些操作(等待时间不计在内),但是第一次这么干的新手会遇到各种问题,其中最常见的一个网络问题就是无法下载第三方库,导致CMake编译失败,这里时候需要手动下载一下,然后copy到

D:opencv-4.4.0opencvsources3rdparty

文件下对于目录内即可。

在config的扩展模块的时候,请去掉所有test相关的模块,然后选择不编译opencv_face模块,原因是它会下载一些东西,但是网络无法连接,这样就可以cmake失败。

完成了整个编译过程之后,生成install之后就可以来配置OpenCV CUDA支持啦!跟配置正常OpenCV4版本相似,唯一不同的就是这里没有opencv_world440.lib文件了,而且根据各个模型生成lib,需要把这些lib全部添加到链接器中,然后把库目录与包含目录原来指向目录都改到指向编译以后的install内相关目录路径,把vc14/bin目录添加环境变量中去。重启VS2015,即可完成全部配置过程。

上述步骤的详细操作,B站视频,直接这里观看!

https://www.bilibili.com/video/BV1Rp4y1a7cm/

02

CUDA加速演示

OpenCV支持传统的图像处理的CUDA加速,从OpenCV4.2开始支持深度神经网络的CUDA加速,因此在OpenCV4.4中,CUDA是既可以加速传统的图像处理,特征与对象检测;又可以支持深度神经网络的CUDA加速。下面的代码首先查询相关GPU

1cuda::getDevice());
2intcount=cuda::getCudaEnabledDeviceCount();
3if(count>0){
4printf("GPUDeviceCount:%d
",count);
5}

设备信息,代码与运行截图如下:

a30a9384-2c10-11ed-ba43-dac502259ad0.png

DNN人脸检测加速

CPU上运行OpenCV DNN人脸检测:

GPU上运行OpenCV DNN人脸检测:

视频背景分析

可以看出,无论是对传统图像处理的视频背景分析,还是基于深度学习DNN人脸检测,OpenCV CUDA都可以取得很好的加速效果。

注意:OpenCV4.4的CUDA导入跟之前的方式有所不同,模型头文件更加模块化,需要导入的头文件如下:

1#include
2#include
3#include
4#include
5#include
6#include
7#include
审核编辑:彭静
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表德赢Vwin官网 网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 图像处理
    +关注

    关注

    27

    文章

    1289

    浏览量

    56720
  • OpenCV
    +关注

    关注

    31

    文章

    634

    浏览量

    41336
  • CUDA
    +关注

    关注

    0

    文章

    121

    浏览量

    13619

原文标题:OpenCV4.X CUDA编译与加速全解析

文章出处:【微信号:CVSCHOOL,微信公众号:OpenCV学堂】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    使用CUDA并行化矩阵乘法加速Blender Python

      这篇文章描述了两种不同的加速矩阵乘法的方法。第一种方法使用 Numba 编译器来减少 Python 代码与循环相关的开销。第二种方法使用 CUDA 并行化矩阵乘法。速度比较证明了 CUD
    的头像 发表于 04-24 17:04 5542次阅读
    使用<b class='flag-5'>CUDA</b>并行化矩阵乘法<b class='flag-5'>加速</b>Blender Python

    OpenCV+CUDA编译实现YOLOv5能加速

    对比一下,加速效果真得是杠杠滴!所以值得编译OpenCV+CUDA支持,因为它不光加速深度学习模型推理,对传统图像处理均有加速
    的头像 发表于 07-18 10:27 2589次阅读
    <b class='flag-5'>OpenCV+CUDA</b>编译<b class='flag-5'>实现</b>YOLOv5能<b class='flag-5'>加速</b>

    何在OpenCV中使用基于深度学习的边缘检测?

    在这篇文章,我们将学习如何在OpenCV中使用基于深度学习的边缘检测,它比目前流行的canny边缘检测器更精确。
    的头像 发表于 05-19 09:52 2085次阅读
    如<b class='flag-5'>何在</b><b class='flag-5'>OpenCV</b>中使用基于深度学习的边缘检测?

    OpenCV4.8 CUDA编程代码教程

    OpenCV4支持通过GPU实现CUDA加速执行,实现OpenCV图像处理程序的
    的头像 发表于 12-05 09:56 1021次阅读
    <b class='flag-5'>OpenCV</b>4.8 <b class='flag-5'>CUDA</b>编程代码教程

    ELF 1技术贴|如何在Ubuntu编译OpenCV

    OpenCV库,利用主机的强大计算性能和丰富的调试工具,可以加速开发进程并简化调试环节。下面就跟小伙伴详细讲述如何在Ubuntu环境下将OpenCV编译为X86
    的头像 发表于 05-31 16:41 1162次阅读
    ELF 1技术贴|如<b class='flag-5'>何在</b>Ubuntu<b class='flag-5'>中</b>编译<b class='flag-5'>OpenCV</b>库

    Vivado HLS视频库加速Zynq-7000 All Programmable SoC OpenCV应用

    OpenCV应用。如何重构一个使用I/O功能来封装加速器的OpenCV应用。如何在加速器功能
    发表于 12-30 16:09

    GPU加速的L0范数图像平滑(L0 Smooth)【CUDA

    GPU 加速的 L0 范数图像平滑(L0 Smooth)【CUDA
    发表于 07-08 12:10

    如何让opencv使用官方的GStreamer-rockchip实现硬件加速

    opencv编译和运行时,使用的是安装的GStreamer视频IO,那么如何让opencv使用官方的GStreamer-rockchip实现硬件加速呢?
    发表于 04-08 15:25

    何在开发环境的Python环境下使用我们提供的BM-OpenCV?

    何在开发环境的Python环境下使用我们提供的BM-OpenCV?
    发表于 09-19 07:14

    在Vivado如何实现OpenCV设计

    观看视频,了解OpenCV库和其在一些典型应用的使用,以及Zynq-7000 SoC的优点和如何实现OpenCV设计。同时您还能学习到如何在
    的头像 发表于 11-20 06:46 3937次阅读

    OpenCV Webinar 2丨如何在OpenCV调用Tengine推理,实现开发效率翻倍

    这个月,OPEN AI LAB的合作伙伴OpenCV 20岁了!值此之际,OpenCV中国团队推出系列OpenCV Webinar,在全球范围内定期邀请OpenCV专家来作...
    发表于 01-26 19:48 3次下载
    <b class='flag-5'>OpenCV</b> Webinar 2丨如<b class='flag-5'>何在</b><b class='flag-5'>OpenCV</b><b class='flag-5'>中</b>调用Tengine推理,<b class='flag-5'>实现</b>开发效率翻倍

    何在CUDA C/C++实现主机和设备同步执行

    内核实现了有效带宽。很大一部分内核是内存带宽限制的,因此计算有效带宽是性能优化的第一步。在以后的文章,我们将讨论如何确定带宽、指令或延迟是性能的限制因素。
    的头像 发表于 04-11 10:26 1940次阅读

    CUDA简介: CUDA编程模型概述

    CUDA 编程模型,线程是进行计算或内存操作的最低抽象级别。 从基于 NVIDIA Ampere GPU 架构的设备开始,CUDA 编程模型通过异步编程模型为内存操作提供加速
    的头像 发表于 04-20 17:16 2997次阅读
    <b class='flag-5'>CUDA</b>简介: <b class='flag-5'>CUDA</b>编程模型概述

    OpenCV配置CUDA以支持GPU加速

    并不完整。作者在实际操作也是踩坑无数,同时借此整理一篇关于OpenCV配置CUDA支持GPU加速的教程,供大家参考。
    的头像 发表于 01-09 10:16 5184次阅读

    OpenCV4.8+CUDA+扩展模块支持编译指南

    OpenCV4.8+CUDA+扩展模块支持编译指南
    的头像 发表于 11-30 16:45 985次阅读
    <b class='flag-5'>OpenCV4.8+CUDA</b>+扩展模块支持编译指南