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


    导  读

        本文将详细介绍如何使用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(33));

      【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,并根据您的需求进行适当的调整。

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

    图片

  • 相关阅读:
    每个开发人员都应该学习的 10 种算法
    一文教你如何设计出优秀的测试用例(文档+视频)
    LMI相机配置步骤,使用Gocator2550相机
    文件上传漏洞(1), 文件上传绕过原理
    【最新版】ChatGPT/GPT4科研应用与AI绘图论文写作(最新增加Claude3、Gemini、Sora、GPTs技术及AI领域中的集中大模型的最新技术)
    http的几种方法
    论文解读(SelfGNN)《Self-supervised Graph Neural Networks without explicit negative sampling》
    网易秋招高频面试题汇总
    一文带你用 Mac M1 跑 RocketMQ
    【数据结构】哈希表
  • 原文地址:https://blog.csdn.net/stq054188/article/details/132766965