侧边栏壁纸
  • 累计撰写 88 篇文章
  • 累计创建 41 个标签
  • 累计收到 4 条评论

目 录CONTENT

文章目录

Windows + Visual Studio 2017 + NVIDIA CUDA 编译 OpenCV 3.4.x

勤为径苦作舟
2023-08-14 / 0 评论 / 0 点赞 / 25 阅读 / 0 字

简介

因为一些功能,这里选择安装的是 OpenCV 3.x。

安装 Visual Studio 和 C++

通过更改 rel 参数 15、16、17,可以分别下载 2017、2019、2022:Thank You for Downloading Visual Studio Community Edition (microsoft.com)

下载 2017 即可。

安装选项仅需要选择一个“使用 C++ 的桌面开发”即可。

安装后将编译器目录D:\ProgramFiles\Microsoft Visual Studio\2017\Community\VC\Tools\MSVC\14.16.27023\bin\Hostx64\x64添加到环境变量。

安装配置 CUDA

Win + R 打开“运行”,输入devmgmt.msc打开设备管理器窗口,在显示适配器中查看 NVIDIA 显卡。

查看 NVIDIA 显卡计算能力和是否支持 CUDA:CUDA GPUs - Compute Capability | NVIDIA Developer

NVIDIA 驱动程序下载(可省略):官方驱动 | NVIDIA


此处只需要查看版本,不需要下载,然后根据版本去看支持的 CUDA 版本:CUDA Release Notes (nvidia.com)

如果已经安装了显卡驱动,也可以命令行运行nvidia-smi查看。

因为用的是 OpenCV 3.4.x,所以下载 CUDA Toolkit 11.x:CUDA Toolkit Archive | NVIDIA Developer

等待 VS 安装完成后打开 CUDA 安装程序,按提示安装。

结束后命令行输入nvcc -V查看是否安装成功。

CMake 编译 OpenCV

下载地址:Releases - OpenCV

我这里选择的是 3 的最后一个版本,解压后可以重命名为 opencv3。

下载安装 CMake:Download | CMake,并将其 bin 目录D:\ProgramFiles\CMake\bin添加到环境变量。

:::info
后文中mingw_build的命名是因为之前用 MinGW 编译过一次,可以改成任意名称。
:::

打开 CMake 如下配置:

CMake Configure 报错解决:

解决完一个就点一次 Configure 试试。

  • CMake Warning at cmake/OpenCVDownload.cmake:202

    用 Proxifier 开启全局代理,或搜索其他代理方式或手动下载。

  • Found PythonInterp: D:/ProgramFiles/Python/Python311/python.exe (found suitable version "3.11.2", minimum required is "2.7")

    安装了 Python 3 且找到了,但是需要 Python 2,安装并在 CMake 中 Add Entry,name 为PYTHON2_EXECUTABLE,值为 Python 2 的安装目录D:\ProgramFiles\Python\Python27

    Download Python | Python.org

  • CONFIGURATION IS NOT SUPPORTED: validate setupvars script in install

    取消勾选OPENCV_GENERATE_SETUPVARS,作用为生成opencv_generated_setupvars.cmake文件,构建完成后配置运行时的环境变量。

勾选BUILD_opencv_world,勾选WITH_CUDA使用 CUDA。

设置CUDA_TOOLKIT_ROOT_DIR,值为C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v11.8

还有其他选项参考如下:

  • CUDA_ARCH_BIN:CUDA 算力大小,如果报红中有此项,就设置为具体的值。
  • BUILD_CUDA_STUBS:允许在没有安装 CUDA 的系统上编译测试。
  • ENABLE_FAST_MATH:启用更快地数学运算,但精度可能会略微丢失。
  • OPENCV_ENABLE_NONFREE:启用依赖于第三方非开源代码的模块。
  • OPENCV_EXTRA_MODULES_PATH:不在 OpenCV 核心库中的扩展功能,配置为 opencv/opencv_contrib: Repository for OpenCV's extra modules (github.com) 的解压目录/modules。
  • OPENCV_DNN_CUDA:CUDA 是否已安装深度神经网络加速库 cuDNN。
  • OPENCV_FORCE_PYTHON_LIBS:勾选会生成 cv2.pyd 文件到 Python 安装目录/Lib/site-packages 下。
  • 搜索javapythonjstest,用不到可以取消勾选。

等 Configure 不报错后,点击 Generate

Visual Studio 安装 OpenCV

VS 打开项目/解决方案,选择 Cmake 中配置的编译目录下的OpenCV.sln

右键CMakeTargets/ALL_BUILD,选择生成

漫长的等待之后,右键CMakeTargets/INSTALL,选择仅用于项目 - 仅生成 INSTALL

最后D:\ProgramFiles\opencv3\mingw-build\install目录就是编译后使用的目录。

C++ 代码测试

VS 新建项目,选择 Visual C++ 中的空项目控制台应用

项目右键属性

配置改成所有配置平台改成x64

配置属性 - VC++ 目录 - 包含目录中新增编译的 install 目录的includeinclude/opencvinclude/opencv2C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v11.8\include引用目录中新增编译的 install 目录的x64/vc15/libC:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v11.8\lib\x64


配置属性 - 链接器 - 输入中新增相对于引用目录下的opencv_world3416d.lib,也可以写绝对路径或通配符,比如opencv*.lib

项目右键生成依赖项 - 生成自定义,勾选 CUDA

新建一个 cpp 文件,并编写代码。

#include <iostream>
#include <cuda_runtime.h>

int main() {
	int count;
	cudaGetDeviceCount(&count);

	if (count == 0) {
		std::cout << "没有可用的CUDA设备" << std::endl;
	}
	else {
		std::cout << "找到" << count << "个可用的CUDA设备" << std::endl;

		for (int i = 0; i < count; ++i) {
			cudaDeviceProp prop;
			cudaGetDeviceProperties(&prop, i);

			std::cout << "设备 " << i << ": " << prop.name << std::endl;
		}
	}

	return 0;
}

工具栏中平台改成 x64,点击本地 Windows 调试器按钮运行。


0

评论区