文章目录
前言
由于项目需要用上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
二、前期准备
- 如果你的编译环境跟我一模一样的话,你可以直接下载百度网盘,提取码:1215,里面的include/lib/bin文件夹直接拷贝出去用就可以了。
- 如果有不同之处,一定要重新编译,不然就会报错:
 error: (-216: No CUDA support) OpenCV was not build to work with the selected device.
- 上面的链接下载下来后,里面的source包含了 OpenCV-4.8.0 + OpenCV_Contrib-4.8.0的zip文件夹,就不用直接去官网下载了。
- 如果重新编译,记得把 source/.cache文件夹,放到解压后的 OpenCV 4.8.0文件夹下。
  
三、CMake编译
接下来,就照着我的截图进行选择。
-  先按下图选择,点击Configure。 
  
-  完成之后,会一片红 
  
-  去除Python相关; 
  
-  去除Java相关; 
  
-  去除JS相关; 
  
-  去除tests相关; 
  
-  勾选CUDA相关 
  
-  将 OpenCV-Contrib 加入到项目中 
  
-  勾选 build_opencv_world 
  
-  去除 OpenCV_ENABLE_NONFREE 
  
-  勾选 ENABLE_FAST_MATH 
  
-  再次点击Configure 
-  完成之后,选择CUDA_ARCH_BIN并勾选 CUDA_FAST_MATH 
  
-  再次点击Configure; 
-  如果这次完成之后,没有红色,那么就直接Generate,done就结束了。 
四、VS编译OpenCV.sln
- 打开 build/OpenCV.sln
- 选择 Release/x64,右键ALL_BUILD - >生成即可。
  
- 如果全部成功,那么再右键INSTALL -> 生成即可。这个会帮你整理生成的include/lib/bin文件夹。
  
五、问题
- .cache文件夹一定要提前放到 OpenCV 4.8.0 文件夹下,不然你会在CMake的时候收获一堆Warning,就是因为下载这堆东西失败。
- CuDNN下载之后,记得放到CUDA文件夹下,然后添加相应的环境变量。
- 我在使用上面的版本时,发现,对于读取同一个model进行推理,Release/cuda下GPU的利用率是30%,但是Debug/cuda的利用率只有5%左右。但是你如果说GPU没用上,其速度又比单纯使用CPU快一倍。目前还没弄懂。
- 另外,我在debug/cpu下的内存大概是200m左右,但是debug/gpu跑到了5.7G。我也没弄懂这个。










