git clone https://github.com/opencv/opencv.git
cd opencv
git checkout 4.11.0 # 切换到最新版本(如4.11.0)
git clone https://github.com/opencv/opencv_contrib.git
cd opencv_contrib
git checkout 4.11.0 # 与主仓库版本一致
注意:OpenCV Contrib的版本需要与OpenCV保持一致。YOLO11开发建议下载4.10.0及更高版本,亲测4.7.0版本不支持YOLO11。
登陆Github OpenCV托管仓库下载对应源码时,需要选择正确的版本分支,如下图所示。
在 opencv
主目录下新建 build
文件夹,用CMake GUI配置:
opencv
主目录(如 F:/opencv-4.11.0
)。build
目录(如 D:/opencv-4.11.0/build
)。CMake GUI构建目录如下图所示。
项目生成器配置如下图所示。
如上图所示,本案例中项目生成器指定VS2017,编译平台选择x64,编译器选择本地默认即可。
选项名称 | 值/操作 |
---|---|
WITH_CUDA |
✔️ 启用CUDA支持 |
OPENCV_DNN_CUDA |
✔️ 启用DNN模块的CUDA加速 |
OPENCV_EXTRA_MODULES_PATH |
✔️ 指向 opencv_contrib/modules 目录 |
ENABLE_FAST_MATH |
✔️ 加速计算(可选) |
BUILD_opencv_world |
✔️ 生成单个库文件(可选) |
OPENCV_ENABLE_NONFREE |
✔️ 启用非免费模块(可选) |
WITH_FFMPEG |
✖️ 用于视频编解码,禁用后不影响DNN模块和CUDA加速的推理功能 |
当编译器选择Visual Studio 2022版本时,还需要设置以下配置选项:
选项名称 | 值/操作 |
---|---|
CUDA_ARCH_BIN |
根据显卡架构设置(如RTX 3080属于Ampere架构,对应的CUDA架构是8.6,此项值填8.6 ) |
WITH_NVCUVENC |
✖️ cudacodec的VideoReader和VideoWriter需安装Nvidia Video Codec SDK,未安装则此项需禁用 |
WITH_NVCUVID |
✖️ cudacodec的VideoReader和VideoWriter需安装Nvidia Video Codec SDK,未安装则此项需禁用 |
若下载卡顿,手动下载以下文件并放入 opencv-4.11.0/.cache
对应目录:
若生成项目文件报错,手动下载以下文件并解压后放入 opencv-4.11.0/build/3rdparty/ade
目录:
点击CMake的Configure和Generate,生成Visual Studio解决方案,如下图所示。
build
目录下的 OpenCV.sln
CMakeTargets
ALL_BUILD
→ 生成(编译时间约30分钟~4小时)INSTALL
→ 生成(将库安装到 build/install
目录)opencv-4.11.0/build/install
目录中查看编译得到的文件。编译完成后,查看 build/install
目录是否包含以下关键文件:
include/opencv2
(头文件)x64/vc15/bin/opencv_world4110.dll
(动态库)x64/vc15/lib/opencv_world4110.lib
(静态库)#include <opencv2/opencv.hpp>
#include <opencv2/core/cuda.hpp>
#include <iostream>
int main() {
std::cout << "CUDA Devices: " << cv::cuda::getCudaEnabledDeviceCount() << std::endl;
return 0;
}
控制台输出窗口应显示检测到的CUDA设备数量(如 CUDA Devices: 1
)。
#include <opencv2/core/cuda.hpp>
#include <opencv2/opencv.hpp>
#include <opencv2/dnn.hpp>
#include <iostream>
/// <summary>
/// CUDA可用性检查
/// </summary>
/// <returns></returns>
bool isCUDAAvailable()
{
try {
// 检查CUDA可用性
int count = cv::cuda::getCudaEnabledDeviceCount();
if (count == 0) {
std::cout << "No CUDA-enabled device available." << std::endl;
return false;
}
// 检查DNN模块是否支持CUDA后端
cv::dnn::Net net;
net.setPreferableBackend(cv::dnn::DNN_BACKEND_CUDA);
net.setPreferableTarget(cv::dnn::DNN_TARGET_CUDA);
std::vector<cv::String> outNames;
outNames = net.getUnconnectedOutLayersNames();
std::cout << "CUDA is available and DNN module supports CUDA backend." << std::endl;
return true;
}
catch (const cv::Exception& e) {
std::cerr << "CUDA exception: " << e.what() << std::endl;
return false;
}
}
int main()
{
if (isCUDAAvailable()) {
std::cout << "CUDA is supported!" << std::endl;
}
else {
std::cout << "CUDA is not supported. Using CPU mode." << std::endl;
}
system("pause");
}
控制台输出窗口如下图所示。
1.CMake报错找不到CUDA
C:/Program Files/NVIDIA GPU Computing Toolkit/CUDA/v11.7
)。CUDA_PATH
已自动添加。2.编译时卡在第三方库下载
.cache
目录。3.显卡计算能力不匹配
CUDA_ARCH_BIN
配置项的值。4.编译失败,报错“CMake Error at modules/gapi/cmake/DownloadADE.cmake:23 (add_library):No SOURCES given to target: ade”
opencv-4.11.0/modules/gapi/cmake
目录下的DownloadADE.cmake文件,如下图所示。opencv-4.11.0/build/3rdparty/ade
目录,压缩包名称为v0.1.2e.zip,解压后子目录名称为ade-0.1.2e
,ade压缩包下载地址为https://github.com/opencv/ade/archive/。通过以上步骤,亲测可以成功编译支持CUDA加速的OpenCV,大幅提升深度学习模型(如YOLOv8/YOLO11)的推理速度。