[转]OpenCV4.8 GPU版本CMake编译详细步骤 与CUDA代码演示

news/2024/11/16 1:13:24/文章来源:https://www.cnblogs.com/rainbow70626/p/18391193

导 读
本文将详细介绍如何使用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

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/790495.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

[图文直播]搭建Zfile私有网盘

特别提醒 部署好后,发现还需要借助外部存储源,而且暂时还没有增加对FTP的支持,那就意味着即便我搭建私有FTP,也暂时无法实现真正的私有网盘。暂时不符合我的要求,仅记录。 前言 以下是ZFile的官网,上面也涉及到了搭建方法 https://docs.zfile.vip/install/os-windows 此次…

gcc/g++编译

gcc编译编译工具链我们写程序的时候用的都是集成开发环境 (IDE: Integrated Development Environment),集成开发环境可以极大地方便我们程序员编写程序,但是配置起来也相对麻烦。在 Linux 环境下,我们用的是编译工具链,又叫软件开发工具包(SDK:Software Development Kit)。…

islide使用教程

1. 主题下载,点击“主题库”,可选择各种主题版本PPT模板下载 以上仅供参考,如有疑问,留言联系

对偶单纯形法算法精要

单纯形法是线性规划中最经典且广泛应用的求解方法,通过在可行解的边界上移动,逐步逼近最优解。它从一个初始基本可行解开始,不断优化目标函数值,直到找到最优解。对偶单纯形法则是单纯形法的一种变形,尤其适用于特定类型的线性规划问题。不同于标准的单纯形法,对偶单纯形…

ppt或wps安装islide

windows安装包下载: 官网:https://www.islide.cc/2. 一路下一步,可选择自定义安装路径,安装后点击体验,打开这个文件 3.能看到里面自动多了islide插件,内容可使用 以上仅供参考,如有疑问,留言联系

一键下载微博美图,‌这款浏览器插件让你轻松拥有!‌

偶尔在逛微博的时候,会遇到一些不错的照片,会想要保存下。但逐个保存太麻烦了,因此在 Chrome 插件商店搜了下,还真有一个能一键下载的插件,来分享一波。300.一键下载微博图片和视频 偶尔在逛微博的时候,会遇到一些不错的照片,会想要保存下。但逐个保存太麻烦了,因此在 …

使用 nuxi clean 命令清理 Nuxt 项目

title: 使用 nuxi clean 命令清理 Nuxt 项目 date: 2024/9/1 updated: 2024/9/1 author: cmdragon excerpt: nuxi clean 命令是管理和维护 Nuxt 项目的重要工具,它帮助你快速清理生成的文件和缓存,确保开发环境的干净。通过定期使用这个命令,你可以避免由于缓存或生成文件…

Dify大语言模型应用开发平台新手必备:安装注册与私有服务器部署全步骤

Dify简介 Dify是一个开源的大语言模型(Large Language Model, LLM)应用开发平台。它融合了后端即服务(Backend as a Service, BaaS)和LLMOps的理念,旨在帮助开发者,甚至是非技术人员,能够快速搭建和部署生成式AI应用程序。 Dify的主要特点包括:简化开发流程:通过提供一…

信息学奥赛初赛天天练-81-NOIP2015普及组-完善程序-二分答案、二分查找、中位数、二分边界、二分时间复杂度

1 完善程序 (单选题 ,每小题3分,共30分) 中位数 median 给定 n(n为奇数且小于 1000)个整数,整数的范围在 0∼m(0<m<2^31) 之间,请使用二分法求这 n个整数的中位数。所谓中位数,是指将这 n个数排序之后,排在正中间的数。(第五空 2 分,其余 3 分) 01 #include <…

Mac版Sourcetree暂存代码和取出代码

实际开发中经常遇到开发一半,要拉代码或者切分支的情况,这时候开发一半的代码如果不提交或者删除重置是无法拉取和切换分支的,那么这个时候可以把这部分代码暂存起来,然后在想取出的时候取出就行了 1.点击暂存文件,如下图2.点击贮藏,然后输入一个标识3.此时就可以正常拉取…

WPF Material Design中资源的查找和使用

Material Design中,一共分为两大块。一个是颜色资源,一个是控件资源。 下面来说下,如何使用控件资源: 在VS中,通过Nuget添加完Material Design 后,还需要在App.xaml中引用这些资源, 引用的方法如下图所示:在1处,引入material design的引用。 在2处,可以修改项目的主题…

对称二叉树-101

题目描述 给你一个二叉树的根节点 root , 检查它是否轴对称。解题思路 这里我们相当于是比较根节点左右两颗子树,我们依次向左右子树的左右两个方向进行遍历,我们比较左子树的左孩子和右子树的右孩子,左子树的右孩子和右子树的左孩子,这里如果不好理解可以看下面这个图片,…