导 读
本文将详细介绍如何使用CMake编译OpenCV4.8 CUDA版本并给出Demo演示,方便大家学习使用。

CMake编译详细步骤

废话不多说,直接进入正题!

【1】我使用的工具版本VS2017 + CMake3.18.2 + OpenCV4.8.0 + CUDA11.2

一般情况下VS版本≥VS2017均可,CMake版本≥3.18.2,OpenCV4.8.0目前最新,CUDA版本保持一致或更高。

【2】OpenCV源码下载与CUDA安装

首先下载OpenCV4.8.0源码和Contrib部分源码:

https://github.com/opencv/opencv
https://github.com/opencv/opencv_contrib

下载后解压到指定目录:

在opencv-4.8.0文件夹下新建一个build文件夹用于保存编译文件:

自己安装CUDA相关依赖项,包括CUDA和CUDNN:

【3】CMake配置选项设置

CMake配置选项设置需要注意的地方如下:

① 根据自己的VS版本选择编译什么版本,此处VS2017 64位

② 配置源码路径与生成文件路径:

③ 配置contrib源码目录:

④ CUDA路径不用配置,会自动识别并填入,还有下面几个需要勾选的选项记得勾选:

⑤ 其他需要勾选的选项:

【4】CMake Config与问题解决

正常步骤接下来就是点击Configure和Generate,就可以生成OpenCV.sln项目。但是经常会出警告或者错误,大部分是因为一些依赖文件下载失败导致的:

虽然是警告,但是一定要解决,否则在后面编译OpenCV.sln项目的时候还是会失败!

解决方法:按照提示,打开对应的CMakeDownloadLog.txt,然后把对应的文件下载下来放到指定目录,里面都有写,如下图所示:

文件下载成功且匹配会有下面对应的提示:

文件下载成功后,再点击Configure就不会有红色警告提示了。然后点击Generate,生成OpenCV.sln项目。

【5】VS编译生成依赖项

打开OpenCV.sln,编译INSTALL,然后右键仅用于项目--仅生成INSTALL

下面是生成后的文件,opencv_world480.dll文件1.06G正常:

OpenCV CUDA编程实例

当使用C++ OpenCV和CUDA编写代码时,一般的步骤如下:

【1】包含必要的头文件:首先,包含相关的头文件,以便使用OpenCV和CUDA库。​​​​​​​

#include <opencv2/opencv.hpp>
#include <opencv2/cudaimgproc.hpp>

【2】加载图像或视频:使用OpenCV的函数加载输入图像或视频。例如,可以使用cv::imread()加载图像或cv::VideoCapture加载视频。​​​​​​​

cv::Mat image = cv::imread("image.jpg");
// 或者
cv::VideoCapture video("video.mp4");

【3】分配GPU内存并将数据复制到设备内存:如果计划在CUDA上执行加速操作,则需要在GPU上为图像或视频分配内存,并将数据从主机内存复制到设备内存。​​​​​​​

cv::cuda::GpuMat gpuImage;
gpuImage.upload(image);
// 或者
cv::cuda::GpuMat gpuVideo;
cv::Mat frame;
video.read(frame);
gpuVideo.upload(frame);

【4】执行CUDA加速操作:调用适当的OpenCV CUDA函数,在GPU上执行CUDA加速操作。​​​​​​​

cv::cuda::cvtColor(gpuImage, gpuImage, cv::COLOR_BGR2GRAY);
// 或者
cv::cuda::blur(gpuVideo, gpuVideo, cv::Size(3, 3));

【5】将结果从设备内存复制到主机内存:使用download()方法将结果从设备内存复制到主机内存。​​​​​​​

cv::Mat result;
gpuImage.download(result);
// 或者
cv::cuda::GpuMat result;
cv::cuda::bitwise_not(gpuImage, result);
cv::Mat result_host;
result.download(result_host);

【6】显示结果:使用OpenCV的函数在屏幕上显示结果图像或视频帧。​​​​​​​

cv::imshow("Result", result);
cv::waitKey(0);
cv::destroyAllWindows();

这些是一般的步骤,具体的代码实现和操作可能会根据需要有所不同。请确保安装和配置了正确版本的OpenCV和CUDA,并根据您的需求进行适当的调整。

至于加速效果还要根据实际情况分析,下面是官方给的个别方法加速对比:
————————————————

本文为Color Space原创,未经允许禁止转载!
原文链接:https://blog.csdn.net/stq054188/article/details/132766965

[转]OpenCV4.8 GPU版本CMake编译详细步骤 与CUDA代码演示的更多相关文章

  1. cmake编译opencv时指定cuda版本

    之前有网友提问说,基于cmake编译时如果切换cuda版本,比如我同时装了cuda8和cuda9,opencv总是找到cuda9,我想用cuda8怎么办?实际上,手头上要配置的工程是基于opencv3 ...

  2. CentOS6-Linux内核编译 详细步骤

    CentOS6-Linux内核编译 详细步骤 背景 Win10用VMwareWorkstation搭的虚拟机 CentOS6.5,内核版本2.6.32-431.el6.x86_64 在该环境下升级至4 ...

  3. 关于Windows安装两个不同版本的MySQL详细步骤

    关于Windows安装两个不同版本的MySQL详细步骤 安装两个不同版本的数据库原因 由于大部分教程所使用的数据库为5.7版本,而我之前安装的是8.0版本. 在一些特殊情况下,低版本数据库不能动,高版 ...

  4. RFC2544吞吐量测试详细步骤-MiniSMB-HurricaneII软件操作演示

    RFC2544吞吐量测试详细步骤-MiniSMB-HurricaneII软件操作演示 关键词:网络性能测试:RFC2544:吞吐量:吞吐率. RFC2544协议是RFC组织提出的用于评测网络互联设备( ...

  5. 微信公众平台开发详细步骤与java代码

    1.微信公众平台设置 首先在https://mp.weixin.qq.com/注册一个公众平台账号(服务号.订阅号.企业号的区别) 微信公众平台地址:https://mp.weixin.qq.com ...

  6. Anaconda安装tensorflow和keras(gpu版,超详细)

    本人配置:window10+GTX 1650+tensorflow-gpu 1.14+keras-gpu 2.2.5+python 3.6,亲测可行 一.Anaconda安装 直接到清华镜像网站下载( ...

  7. faiss CPU版本+GPU版本安装

    faiss安装 faiss是facebook开发的有CPU版本和GPU版本的求密集向量相似性和进行密集向量聚类的库. faiss用c++编写,安装faiss需要在github上下载其c++源码并用ma ...

  8. ubuntu 18 安装xgboost GPU版本

    综合上述两个帖子: https://www.cnblogs.com/huadongw/p/6161145.html https://blog.csdn.net/u011587516/article/d ...

  9. Cmake编译protobuf

    编译指令,在powershell中执行 :      .\protoc.exe .\ive.proto --cpp_out .      .\protoc.exe .\ive.proto --csha ...

  10. win10 用cmake 3.5.2 和 vs 2015 update1 编译 GPU版本(cuda 8.0, cudnn v5 for cuda 8.0)

    win10 用cmake 3.5.2 和 vs 2015 update1 编译 GPU版本(cuda 8.0, cudnn v5 for cuda 8.0)  用vs 2015打开 编译Release ...

随机推荐

  1. 《使用Gin框架构建分布式应用》阅读笔记:p52-p76

    <用Gin框架构建分布式应用>学习第4天,p32-p76总结,总计25页. 一.技术总结 1.Go知识点 (1)iouti 书上使用ioutil包读取JSON文件,但是从go 1.16 开 ...

  2. 使用 Cilium 作为网络插件部署 K8s + KubeSphere

    Cilium 简介 Cilium 是一个用于容器网络领域的开源项目,主要是面向容器而使用,用于提供并透明地保护应用程序工作负载(如应用程序容器或进程)之间的网络连接和负载均衡. Cilium 在第 3 ...

  3. js实现浏览器后退页面刷新

    最近在开发中遇到一个问题: 在一个列表页面,点击进入详情,详情页面对其状态操作,其详情页面有做修改,然后点击浏览器后退,返回到列表页,在列表页面状态还是操作之前的,为解决状态统一需要手动刷新改列表页. ...

  4. Java net.sf.jxls 生成模板 并导出excel

    如果是 maven项目需要引入下面这个就可以 <dependency> <groupId>net.sf.jxls</groupId> <artifactId& ...

  5. 内衣 ERP 系统 (Delphi)

    服装行业ERP系统,当时从开始实施推行,最后二次开发,源代码交接... 发几个截图看看 可配置的查询 这个功能几乎被我全改过... 后台报表配置 欢迎微信搜一搜 IT软件部落 关注公众号,你可以了解更 ...

  6. vagrant 安装centos8 虚拟机搭建lamp环境

    首先保证已经安装了 virtualbox vagrant两个软件 然后找个目录下载centos8 的 box wget https://vagrantcloud.com/generic/boxes/c ...

  7. typeScript 基础类型 (三)

    typeScript 的基础类型包含 Boolean.Number.String.null.undefined 以及 ES6 的  Symbol 和 ES10 的 BigInt. 下面介绍每种类型的使 ...

  8. 网站统计代码v1.0

    var m = {}; var p ={}; var gifUrl = 'http://hm.iwgame.test/v.gif'; (function() { //参数组合类 m = { ck : ...

  9. SQL注入sqlmap联动burpsuite之burp4sqlmap++插件

    目录 sqlmap和burpsuite介绍 sqlmap4burp++介绍 sqlmap4burp++的使用 小插曲:sqlmap报错文件不存在怎么办? 官方扩展CO2之SQLmapper sqlma ...

  10. 进程管理工具之supervisor(完整版)*

    Supervisor 介绍 Supervisor是用Python开发的一套通用的进程管理程序,能将一个普通的命令行进程变为后台daemon,并监控进程状态,异常退出时能自动重启.它是通过fork/ex ...