-
安装Visual Studio,最好安装2017或者2019版本的(或之间的版本),否则后续编译的时候可能报错;
-
安装好CUDA和对应版本的cuDNN;
-
将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目录下,记得根据自己安装的版本而更改路径;
-
opencv和opencv_contrib的源码都不要直接git clone,记得先点tags,下载对应版本相同的源码包,比如opencv-4.5.5.zip和opencv_contrib-4.5.5.zip,然后解压;
-
新建build目录,打开CMake;
-
选择好源码路径(opencv目录)和编译路径(build路径);
-
点击Configure按钮;
-
此时日志栏可能会提示说无法下载依赖的库,打开build/CMakeDownloadLog.txt文件,根据日志手动下载文件并放至OPENCV_DOWNLOAD_PATH选项指定目录的对应子目录内,并将文件名更改为子目录内已有空文件的文件名;
-
如果某些位于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网站上查; -
勾选上WITH_CUDA选项和OPENCV_DNN_CUDA选项;
-
设置OPENCV_EXTRRA_MODULES_PATH选项的值为opencv_contrib-4.5.5\modules目录;
-
再次点击Configure按钮;
-
没有错误后点击Generate按钮生成扩展名为.sln的Visual Studio工程;
-
打开build\OpenCV.sln文件;
-
点击Visual Studio上方界面的复选框,选择仅编译release版本;
-
将鼠标移至界面右侧解决方案资源管理器中的CMakeTargets目录下的All Build上右键单击”生成“,开始编译OpenCV;
-
编译可能会出现一些错误,比如测试程序的错误,但只要库编译出来了就行;
-
再将鼠标移至CMakeTargets目录下的INSTALL上右键单击”生成“,安装编译好的OpenCV库;
-
安装好的OpenCV库位于build\install目录下;
-
将D:\OpenCV\build\install\x64\vc16\bin添加到系统的PATH环境变量内(请根据自己创建的build目录的位置更改该路径),因为执行OpenCV应用程序的时候需要调用该目录下的动态库;
-
使用Visual Studio新建一个控制台应用;
-
将D:\OpenCV\build\install\include添加到项目的”附加包含目录“设置项中;
-
将D:\OpenCV\build\install\x64\vc16\lib添加到项目的”附加库目录“设置项中;
-
在D:\OpenCV\build\install\x64\vc16\lib目录下执行
dir /b | find ".lib"
命令,如果是PowerShell,就先执行cmd
命令将PowerShell窗口转为命令行窗口; -
将上面那条命令的输出复制粘贴到项目的”附加依赖项“设置项中;
-
编译运行如下代码,需要在项目目录放一张名为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; }
编译支持CUDA和cuDNN的OpenCV
最新推荐文章于 2025-03-11 14:11:27 发布