OPENCV3.4.6+ RTX2060+VS2017编译记录
注:本来一开始用的346版本,结果出问题;换成了3.4.16
一、显卡加速环境准备
默认安装的英伟达显卡驱动是没有配置显卡加速的。
要在程序中可以使用显卡加速需要先配置环境
需要准备:
1.显卡 rtx 2060(如何查看显卡是否支持硬件加速并选择合适的软件版本)
2.英伟达CUDA Toolkit: cuda_11.1.1_456.81_win10.exe
3.CUDNN:cudnn-windows-x86_64-8.4.0.27_cuda11.6-archive.zip
注意:此处并不是最新版本就是最合适的!!一定要根据显卡的型号选择,否则白搭。而且在安装cuda tool kit的时候最好只安装 cuda部分,驱动等其他都不要勾选,否则会遇到鼠标键盘不好使等奇怪的问题
二、opencv 编译
1.点击config
配置选择如下,vs选择2015 或者2017均可,其他有问题,而且必须要选择64bit
2 点击finish后开始自动生成
搜索cuda后,如下图勾选 with_cuda
然后再次点击config,并等待出错
3.
如果顺利生成跳过此条
如果提示download XXX失败
就直接再次点击config,已经config过的会直接跳过,知道所有的都下载完成
4.点击生成
报错
CMake Error: The following variables are used in this project, but they are set to NOTFOUND.
Please set them or make sure they are set and tested correctly in the CMake files:
CUDA_nppicom_LIBRARY (ADVANCED)
出现这个问题原因:
用cmake编译OpenCV的时候,出现错误“CUDA_nppicom_LIBRARY (ADVANCED)”,如这个链接(https://gitlab.kitware.com/cmake/cmake/-/commit/1d9f2f9714af3cd9f43975456c4be03c2df463ad)
所述:在CUDA 11.0中,移除了这个库。但是CMAKE好像没及时更新。因此,信息不同步,导致报错。
————————————————
版权声明:本文为CSDN博主「ipanda_zll」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/ipanda_huanhuan/article/details/107341173
解决办法:
cmake 的commit记录一年前就已经发现并在后期解决了此问题
修改策略是 修改opencv 目录 sources\cmake\FindCUDA.cmake
直接搜索文件 nppicom
修改为下图的样子
也就说,当cuda 版本大于11的时候不载再使用nppicom\
至此啊,最好再重新开始config一遍,
然后generate就很快成功。
生成了opencv.sln
用vs2017打开 opencv.sln
选择项目-生成,又是一堆报错
我不理解!
突然我想起了一件事,这个opencv346的源码是很早以前的了,大概是2019年的,所以难怪cmake的文件是错的,我最近嫌弃新下载麻烦就直接复制了之前下载的这个包。好了,这旧版本我不伺候了,重新下载了最新的3.4.16的源码,这次志在必得!
然后我就吭哧吭哧的下载完了新版3.4.16,然后径直去找cmake\FindCUDA.cmake文件,
结果这里的还是没改,索性我直接把整行注释了,反正我这也不会安装别的版本的cuda
然后重新config,报下载错误,
然后重新config,此处我的网络感觉变菜了,下载了好一会儿。下载完成后点击generate,
点击生成的opencv.sln然后点击vs生成,等待一小时,生成完成。至此结束。
至于3.4.6版本为什么生成失败,不清楚。
生成完成后发现目录和之前的opencv目录不一样,找不到lib什么的
还需要点击 解决方案>cmake target>install 右键仅用于项目>仅生成项目install.
稍等片刻,生成完成后就会在看到多了一个install文件夹,里面的就是我们之前需要的lib文件和头文件。
但是由于我们在cmake的时候没有勾选 BUILD_opencv_world所以导致我们没有生成opencv_world.lib而是很多散装的lib文件,好处是可以减少体积,坏处是略麻烦,需要自己手动更改附加项依赖。
倒数第二步:将opencv添加到环境变量,只需要lib和bin即可
最后一步,测试一下:
新建一个控制台项目,添加刚刚编译的opencv作为项目属性。执行以下代码。
int a = cuda::getCudaEnabledDeviceCount();
cout <<"显卡可加速数量:" <<a << endl; \\1
waitKey(0);
如上,显示是1,就证明配置成功。
总结:
之前generate配置错了,选择了32bit,然后导致生成出错,重新config的时候在cmake左上角点击清除缓存后最后把build目录下的东西也删除掉