编译 CUDA加速的 OpenCV-4.8.0 版本

文章目录

  • 前言
  • 一、编译环境
  • 二、前期准备
  • 三、CMake编译
  • 四、VS编译OpenCV.sln
  • 五、问题


前言

由于项目需要用上CUDA加速的OpenCV,编译时也踩了不少坑,所以这里记录一下。


一、编译环境

我的编译环境是:
Win10 + RTX4050 + CUDA-12.0 + CUDNN 8.9.6.50 + VS2019 + CMake-3.28.0 + OpenCV-4.8.0 + OpenCV_Contrib-4.8.0
额外注意的是:CUDA_ARCH_BIN=7.5;8.6;8.9;9.0

二、前期准备

  1. 如果你的编译环境跟我一模一样的话,你可以直接下载百度网盘,提取码:1215,里面的include/lib/bin文件夹直接拷贝出去用就可以了。
  2. 如果有不同之处,一定要重新编译,不然就会报错:
    error: (-216: No CUDA support) OpenCV was not build to work with the selected device.
  3. 上面的链接下载下来后,里面的source包含了 OpenCV-4.8.0 + OpenCV_Contrib-4.8.0的zip文件夹,就不用直接去官网下载了。
  4. 如果重新编译,记得把 source/.cache文件夹,放到解压后的 OpenCV 4.8.0文件夹下。
    编译 CUDA加速的 OpenCV-4.8.0 版本_第1张图片

三、CMake编译

接下来,就照着我的截图进行选择。

  1. 先按下图选择,点击Configure。
    编译 CUDA加速的 OpenCV-4.8.0 版本_第2张图片

  2. 完成之后,会一片红
    编译 CUDA加速的 OpenCV-4.8.0 版本_第3张图片

  3. 去除Python相关;
    编译 CUDA加速的 OpenCV-4.8.0 版本_第4张图片

  4. 去除Java相关;
    编译 CUDA加速的 OpenCV-4.8.0 版本_第5张图片

  5. 去除JS相关;
    编译 CUDA加速的 OpenCV-4.8.0 版本_第6张图片

  6. 去除tests相关;
    编译 CUDA加速的 OpenCV-4.8.0 版本_第7张图片

  7. 勾选CUDA相关
    编译 CUDA加速的 OpenCV-4.8.0 版本_第8张图片

  8. 将 OpenCV-Contrib 加入到项目中
    编译 CUDA加速的 OpenCV-4.8.0 版本_第9张图片

  9. 勾选 build_opencv_world
    编译 CUDA加速的 OpenCV-4.8.0 版本_第10张图片

  10. 去除 OpenCV_ENABLE_NONFREE
    编译 CUDA加速的 OpenCV-4.8.0 版本_第11张图片

  11. 勾选 ENABLE_FAST_MATH
    编译 CUDA加速的 OpenCV-4.8.0 版本_第12张图片

  12. 再次点击Configure

  13. 完成之后,选择CUDA_ARCH_BIN并勾选 CUDA_FAST_MATH
    编译 CUDA加速的 OpenCV-4.8.0 版本_第13张图片

  14. 再次点击Configure;

  15. 如果这次完成之后,没有红色,那么就直接Generate,done就结束了。


四、VS编译OpenCV.sln

  1. 打开 build/OpenCV.sln
  2. 选择 Release/x64,右键 ALL_BUILD - >生成即可。
    编译 CUDA加速的 OpenCV-4.8.0 版本_第14张图片
  3. 如果全部成功,那么再右键INSTALL -> 生成即可。这个会帮你整理生成的include/lib/bin文件夹
    编译 CUDA加速的 OpenCV-4.8.0 版本_第15张图片

五、问题

  1. .cache文件夹一定要提前放到 OpenCV 4.8.0 文件夹下,不然你会在CMake的时候收获一堆Warning,就是因为下载这堆东西失败。
  2. CuDNN下载之后,记得放到CUDA文件夹下,然后添加相应的环境变量。
  3. 我在使用上面的版本时,发现,对于读取同一个model进行推理,Release/cuda下GPU的利用率是30%,但是Debug/cuda的利用率只有5%左右。但是你如果说GPU没用上,其速度又比单纯使用CPU快一倍。目前还没弄懂。
  4. 另外,我在debug/cpu下的内存大概是200m左右,但是debug/gpu跑到了5.7G。我也没弄懂这个。

你可能感兴趣的:(opencv,c++,GPU,CUDA)