编译支持CUDA和cuDNN的OpenCV

  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 
    #include 
    #include 
    #include 
    
    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,OpenCV,CUDA,cuDNN,OpenCV)