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目录下的东西也删除掉

posted @ 2022-05-27 15:01  neo3301  阅读(23)  评论(0编辑  收藏  举报