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

news2024/12/29 10:07:40

导  读

    本文将详细介绍如何使用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/opencvhttps://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,并根据您的需求进行适当的调整。

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

图片

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

ICIF2023化工展首亮相,宏工科技解决方案助力制造升级

ICIF China 2023中国国际化工展览会于9月4日-6日在上海新国际博览中心举办。宏工科技携化工物料处理一站式解决方案首次亮相&#xff0c;同化工行业全产业链共叙物料处理自动化未来。 宏工科技是一家提供物料处理自动化设备、系统与服务的国家级高新技术企业&#xff0c;业务覆…

Java多线程4种拒绝策略

文章目录 一、简介二、AbortPolicy拒绝策略A. 概述B. 拒绝策略实现原理C. 应用场景D. 使用示例 三、CallerRunsPolicy拒绝策略A. 概述B. 拒绝策略实现原理C. 应用场景D. 使用示例 四、DiscardPolicy拒绝策略A. 概述B. 拒绝策略实现原理C. 应用场景D. 使用示例 五、DiscardOldes…

966SEO扫地僧站群·万能HTML模板[V1.9.1]

扫地僧站群万能HTML模板是一款站点管理软件,其主要特点是可以将原始的html模板放入程序中,无需编写任何标签,程序会全自动替换处理,从而快速构建出一个完整的网站,这种模式相对于传统的网站建设方式更加快速、简单,同时可以大幅度降低网站建设的成本和难度.服务器及域名量的配置…

【Linux】进程优先级,环境变量,进程地址空间

文章目录 1.进程优先级基本概念查看系统进程PRI and NIPRI vs NI修改进程优先级的命令其他概念 2. 环境变量基本概念查看环境变量方法常见环境变量测试PATH环境变量相关的命令环境变量的组织方式通过代码如何获取环境变量通过系统调用获取或设置环境变量环境变量通常是具有全局…

1DM+下载器_11.2.1魔改增强版下载

1DM「原&#xff1a;IDM」下载器是一款安卓端的下载工具&#xff0c;多语言解锁版直安装版本&#xff0c;号称是目前 Android 平台最快、最先进的下载管理器应用「支持通过Torrent下载」&#xff0c;而这个版本是改线程的最新idm版本&#xff0c;可用来下载视频、音乐、电影、T…

2023-9-8 求组合数(三)

题目链接&#xff1a;求组合数 IV #include <iostream> #include <algorithm>using namespace std;const int N 5010;int primes[N], cnt; bool st[N]; // 每个质数的次数 int sum[N];void get_primes(int n) {for(int i 2; i < n; i){if(!st[i]) primes[cnt]…

bean的管理-bean的获取

获取bean 默认情况下&#xff0c;在Spring项目启动时&#xff0c;会把bean都创建好&#xff08;但是还会受到作用域及延迟初始化的影响&#xff09;放在IOC容器中&#xff0c;如果想主动获取这些bean&#xff0c;可以通过如下方式 根据name获取bean Object getBean&#xff08…

智能机器人:打造自动化未来的关键技术

文章目录 1. 智能机器人的基本概念2. 智能机器人的关键技术2.1 机器视觉2.2 机器学习与深度学习2.3 传感器技术 3. 智能机器人的应用领域3.1 制造业3.2 医疗保健3.3 农业3.4 服务业 4. 智能机器人的未来趋势4.1 自主决策能力的提升4.2 协作与互操作性4.3 个性化定制4.4 环境感知…

正弦信号的平均功率和峰值电压计算举例

正弦信号的平均功率和峰值电压计算举例 一、问题 假设加载在纯电阻为R1Ω&#xff0c;频率为50Hz和60Hz的正弦信号的平均功率分别为0.5W和2W,请求解这两个信号的峰值电压 U p 1 U_{p1} Up1​和 U p 2 U_{p2} Up2​。 二、解答&#xff1a; 根据欧姆定律可知&#xff1a;对于…

Java虚拟机内存模型和垃圾回收机制

1 Java虚拟机内存模型是怎样的&#xff1f; 2 常见垃圾回收器及其作用内存&#xff1f;

激活函数总结(三十):激活函数补充(Logit、Softsign)

激活函数总结&#xff08;三十&#xff09;&#xff1a;激活函数补充 1 引言2 激活函数2.1 Logit激活函数2.2 Softsign激活函数 3. 总结 1 引言 在前面的文章中已经介绍了介绍了一系列激活函数 (Sigmoid、Tanh、ReLU、Leaky ReLU、PReLU、Swish、ELU、SELU、GELU、Softmax、So…

基于 SpringBoot 的大学生体质测试管理系统,附源码

文章目录 简介效果图系统首页模块管理员功能模块用户功能模块教师功能模块 部分源码源码下载地址 简介 本次设计任务是要设计一个大学生体质测试管理系统&#xff0c;通过这个系统能够满足大学生体质测试管理系统功能。系统的主要功能包括首页、个人中心、用户管理、教师管理、…

记一次opencv安装过程

环境为anaconda&#xff0c;python选择3.9 上图&#xff0c;def仅为了可以折叠&#xff0c;方便观察 (simswap) C:\Windows\system32>conda install opencv def 执行后失败:无科学上网Retrieving notices: ...working... DEBUG:urllib3.connectionpool:Starting new HTTPS …

高频golang面试题:简单聊聊内存逃逸?

文章目录 问题怎么答举例 问题 知道golang的内存逃逸吗&#xff1f;什么情况下会发生内存逃逸&#xff1f; 怎么答 golang程序变量会携带有一组校验数据&#xff0c;用来证明它的整个生命周期是否在运行时完全可知。如果变量通过了这些校验&#xff0c;它就可以在栈上分配。…

了解 Java 并发编程中的 volatile 关键字

&#x1f60a; 作者&#xff1a; 一恍过去 &#x1f496; 主页&#xff1a; https://blog.csdn.net/zhuocailing3390 &#x1f38a; 社区&#xff1a; Java技术栈交流 &#x1f389; 主题&#xff1a; 了解 Java 并发编程中的 volatile 关键字 ⏱️ 创作时间&#xff1a; …

[NLP]LLM---FineTune自己的Llama2模型

一 数据集准备 Let’s talk a bit about the parameters we can tune here. First, we want to load a llama-2-7b-hf model and train it on the mlabonne/guanaco-llama2-1k (1,000 samples), which will produce our fine-tuned model llama-2-7b-miniguanaco. If you’re …

5分钟生成10条短视频,AI重构电商营销

点击关注 文&#xff5c;姚 悦&#xff0c;编&#xff5c;王一粟 “我们将正式告别过去单一渠道投放的时代&#xff0c;走向一站式跨渠道品效联合经营的全新时代。”9月6日&#xff0c;在2023年其最重要的营销峰会上&#xff0c;淘天集团阿里妈妈市场部总经理穆尔说道。 当天…

【C++】模拟实现二叉搜索树的增删查改功能

个人主页&#xff1a;&#x1f35d;在肯德基吃麻辣烫 我的gitee&#xff1a;C仓库 个人专栏&#xff1a;C专栏 文章目录 一、二叉搜索树的Insert操作&#xff08;非递归&#xff09;分析过程代码求解 二、二叉搜索树的Erase操作&#xff08;非递归&#xff09;分析过程代码求解…

java从入门到起飞(八)——循环和递归

文章目录 Java循环1. 什么是循环&#xff1f;1.1 为什么需要循环&#xff1f;1.2 循环的分类 2. Java中的循环结构2.1 for循环2.2 while循环2.3 do-while循环 3. 循环控制语句3.1 break语句3.2 continue语句 4. 总结 Java递归1. 什么是递归2. 递归的原理3. 递归的实现4. 递归的…

鼠标右键使用VSCode打开文件或文件夹配置

天行健&#xff0c;君子以自强不息&#xff1b;地势坤&#xff0c;君子以厚德载物。 每个人都有惰性&#xff0c;但不断学习是好好生活的根本&#xff0c;共勉&#xff01; 文章均为学习整理笔记&#xff0c;分享记录为主&#xff0c;如有错误请指正&#xff0c;共同学习进步。…