编译支持CUDA和cuDNN的OpenCV

本文介绍了如何在Windows环境下,利用Visual Studio 2017或2019编译带有CUDA和cuDNN支持的OpenCV。步骤包括安装Visual Studio、CUDA和cuDNN,配置CUDA路径,下载opencv和opencv_contrib源码,使用CMake进行配置和生成项目,解决编译过程中可能出现的问题,最后设置环境变量和项目属性,确保能成功运行包含OpenCV的程序。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

  1. 安装Visual Studio,最好安装2017或者2019版本的(或之间的版本),否则后续编译的时候可能报错;

  2. 安装好CUDA和对应版本的cuDNN;

  3. 将C:\Program Files\NVIDIA\CUDNN\v8.3\bin目录下的文件复制到C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v11.5\bin目录下,将C:\Program Files\NVIDIA\CUDNN\v8.3\include目录下的文件复制到C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v11.5\include目录下,将C:\Program Files\NVIDIA\CUDNN\v8.3\lib\x64目录下的文件复制到C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v11.5\lib\x64目录下,记得根据自己安装的版本而更改路径;

  4. opencv和opencv_contrib的源码都不要直接git clone,记得先点tags,下载对应版本相同的源码包,比如opencv-4.5.5.zip和opencv_contrib-4.5.5.zip,然后解压;

  5. 新建build目录,打开CMake;

  6. 选择好源码路径(opencv目录)和编译路径(build路径);

  7. 点击Configure按钮;

  8. 此时日志栏可能会提示说无法下载依赖的库,打开build/CMakeDownloadLog.txt文件,根据日志手动下载文件并放至OPENCV_DOWNLOAD_PATH选项指定目录的对应子目录内,并将文件名更改为子目录内已有空文件的文件名;

  9. 如果某些位于raw.githubusercontent.com网站的文件无法下载,那么可以根据链接里的commit id直接访问github上的那次提交的版本的文件,如https://raw.githubusercontent.com/opencv/opencv_3rdparty/4d348507d156ec797a88a887cfa7f9129a35afac/ffmpeg/ffmpeg_version.cmake对应链接https://github.com/opencv/opencv_3rdparty/blob/4d348507d156ec797a88a887cfa7f9129a35afac/ffmpeg/ffmpeg_version.cmake,也可以通过更改hosts文件的方式来解决无法复制github上文件原内容的问题,比如在C:\Windows\System32\drivers\etc\hosts文件的末尾添加一行185.199.108.133 raw.githubusercontent.com再重新点一次Configure按钮,raw.githubusercontent.com的IP地址可以去www.ipaddress.com网站上查;

  10. 勾选上WITH_CUDA选项和OPENCV_DNN_CUDA选项;

  11. 设置OPENCV_EXTRRA_MODULES_PATH选项的值为opencv_contrib-4.5.5\modules目录;

  12. 再次点击Configure按钮;

  13. 没有错误后点击Generate按钮生成扩展名为.sln的Visual Studio工程;

  14. 打开build\OpenCV.sln文件;

  15. 点击Visual Studio上方界面的复选框,选择仅编译release版本;

  16. 将鼠标移至界面右侧解决方案资源管理器中的CMakeTargets目录下的All Build上右键单击”生成“,开始编译OpenCV;

  17. 编译可能会出现一些错误,比如测试程序的错误,但只要库编译出来了就行;

  18. 再将鼠标移至CMakeTargets目录下的INSTALL上右键单击”生成“,安装编译好的OpenCV库;

  19. 安装好的OpenCV库位于build\install目录下;

  20. 将D:\OpenCV\build\install\x64\vc16\bin添加到系统的PATH环境变量内(请根据自己创建的build目录的位置更改该路径),因为执行OpenCV应用程序的时候需要调用该目录下的动态库;

  21. 使用Visual Studio新建一个控制台应用;

  22. 将D:\OpenCV\build\install\include添加到项目的”附加包含目录“设置项中;

  23. 将D:\OpenCV\build\install\x64\vc16\lib添加到项目的”附加库目录“设置项中;

  24. 在D:\OpenCV\build\install\x64\vc16\lib目录下执行dir /b | find ".lib"命令,如果是PowerShell,就先执行cmd命令将PowerShell窗口转为命令行窗口;

  25. 将上面那条命令的输出复制粘贴到项目的”附加依赖项“设置项中;

  26. 编译运行如下代码,需要在项目目录放一张名为file.png的图片,该测试程序会将file.png二值化后显示在屏幕上,记得”解决方案配置“和”解决方案平台“要和刚刚设置项目属性的配置保持一致,”解决方案平台“与编译的OpenCV库一致、选择"x64"。

    #include <iostream>
    #include <opencv2/highgui/highgui.hpp>
    #include <opencv2/cudaarithm.hpp>
    #include <opencv2/cudaimgproc.hpp>
    
    int main()
    {
    	try
    	{
    		cv::Mat src_host = cv::imread("file.png", cv::IMREAD_GRAYSCALE);
    		cv::cuda::GpuMat dst, src;
    		src.upload(src_host);
    
    		cv::cuda::threshold(src, dst, 128.0, 255.0, cv::THRESH_BINARY);
    
    		cv::Mat result_host;
    		dst.download(result_host);
    
    		cv::imshow("Result", result_host);
    		cv::waitKey();
    	}
    	catch (const cv::Exception& ex)
    	{
    		std::cout << "Error: " << ex.what() << std::endl;
    	}
    	return 0;
    }
    
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值