opencv、opencv_contrib及cuda联合编译详细教程

opencv、opencv_contrib及cuda联合编译详细教程

最近在使用opencv时需要用cuda加速,网上了很多帖子,踩了很多雷,摸索出来了一点规律,分享给大家,一起探讨(我也是刚刚入手,因为踩了很多雷,所以才想记录分享一下,平时很懒的)。接下来进去正题!

环境要求:
1、硬盘需要40个G左右内存。
2、首先显卡要是NVIDIA显卡,查询显卡是否支持cuda,可以下载gpu-z,也可以去NVIDIA官网查看。

安装前准备
1、下载cuda并安装,cuda各个版本下载链接为:
https://developer.nvidia.com/cuda-toolkit-archive
2、下载opencv以及opencv_contrib:
github的opencv网址为:https://github.com/opencv
下载过程如下:
点击opencv可以下载opencv,点击opencv_contrib可以下载opencv_contrib。
列举下载opencv过程
点击opencv
opencv、opencv_contrib及cuda联合编译详细教程_第1张图片
点击releaseopencv、opencv_contrib及cuda联合编译详细教程_第2张图片
选择相应版本exe文件下载opencv、opencv_contrib及cuda联合编译详细教程_第3张图片
opencv_contrib下载过程:
点击releaseopencv、opencv_contrib及cuda联合编译详细教程_第4张图片
选择与opemcv相同的版本下载,点击zip就可以下载opencv、opencv_contrib及cuda联合编译详细教程_第5张图片

选择下载版本时需注意cuda版本是否支持相应的opencv版本,我的cuda版本是10.2,最开始我用的opencv3.4.1编译虽然成功了,但是运行程序的时候会报“
no kernel image is available for execution on the device”这个错,把opencv版本换成了3.4.10就成功了。血的教训!!!

这里插一句,在写记录的时候,还是截的opencv3.4.1的图,编译成功了,但是没办法使用,后面编译opencv3.4.10的时候,懒得截图了,就这样,这个联合编译过程和opencv版本无关,哪个版本都是一样的操作,意会就可以了!

下载完成后,把他们解压到同一个文件夹
在这里插入图片描述
cmake编译

开始cmake编译过程:
第一个选择opencv里面的source文件夹,第二个是编译后的文件存放位置
在这里插入图片描述
第一个选择opencv文件夹下的sourcesopencv、opencv_contrib及cuda联合编译详细教程_第6张图片
选择完成后,点击Configure:
刚刚所说的编译后文件存放位置如果没有的话,cmake会根据你所输入的路径创建一个文件夹opencv、opencv_contrib及cuda联合编译详细教程_第7张图片
后来我又试了一遍,vs2017不会比vs2019编译成功可能性大,应该还是和opencv以及cuda的版本选择有关,新的话还是推荐使用vs2019opencv、opencv_contrib及cuda联合编译详细教程_第8张图片
接下来是不算漫长的等待。。。。。。opencv、opencv_contrib及cuda联合编译详细教程_第9张图片
等待。。。。。。
opencv、opencv_contrib及cuda联合编译详细教程_第10张图片opencv、opencv_contrib及cuda联合编译详细教程_第11张图片
这表示编译中出现了错误,要看D:/opencv/opencv341/opencv/newbuild/文件夹下的CMakeDownloadLog.txt;
编译完成后打开CMakeDownloadLog.txt
opencv、opencv_contrib及cuda联合编译详细教程_第12张图片打开后是这个样子
opencv、opencv_contrib及cuda联合编译详细教程_第13张图片
解释一下第一段:后面雷同
在这里插入图片描述
do_copy
“opencv_ffmpeg.dll” “b8120c07962d591e2e9071a1bf566fd0”
“https://raw.githubusercontent.com/opencv/opencv_3rdparty/0a0e88972a7ea97708378d0488a65f83e7cc5e69/ffmpeg/opencv_ffmpeg.dll”
“D:/opencv/opencv341/opencv/newbuild/3rdparty/ffmpeg”

#missing
“D:/opencv/opencv341/opencv/newbuild/3rdparty/ffmpeg/opencv_ffmpeg.dll”

这段话的意思是让我们把"opencv_ffmpeg.dll"拷贝到"D:/opencv/opencv341/opencv/newbuild/3rdparty/ffmpeg"这个文件夹下面,因为cmake没有找到这个文件,这个文件我们可以通过后面那个网址下载到,复制https://raw.githubusercontent.com/opencv/opencv_3rdparty/0a0e88972a7ea97708378d0488a65f83e7cc5e69/ffmpeg/opencv_ffmpeg.dll

这个网址,在浏览器打开,就可以直接下载。
下载完成后拷贝到"D:/opencv/opencv341/opencv/newbuild/3rdparty/ffmpeg"这个文件夹下面。
你以为这就完了吗?
不,拷贝的时候你会发现,没有这个文件夹,怎么办,不要急。。。。。。后面还有一句话:
opencv、opencv_contrib及cuda联合编译详细教程_第14张图片cmake_download
“D:/opencv/opencv341/opencv/sources/.cache/ffmpeg/b8120c07962d591e2e9071a1bf566fd0-opencv_ffmpeg.dll”
“https://raw.githubusercontent.com/opencv/opencv_3rdparty/0a0e88972a7ea97708378d0488a65f83e7cc5e69/ffmpeg/opencv_ffmpeg.dll”

这句话的意思就是,你从那个网址上面下载的文件,可以改个名字,放在"D:/opencv/opencv341/opencv/sources/.cache/ffmpeg“这个文件夹下面,文件名就是:

“b8120c07962d591e2e9071a1bf566fd0-opencv_ffmpeg.dll"
拷贝时你会发现这个:opencv、opencv_contrib及cuda联合编译详细教程_第15张图片
他们都是0kb,说明没有数据。

重复操作,知道所有的缺失文件被补齐。。。。。。
拷贝完成后,再次点击configure
opencv、opencv_contrib及cuda联合编译详细教程_第16张图片
你会发现,这次过去的真快,由此可以看出,时间久是因为他在下载那几个文件。

下面开始配置opencv_contrib
Github其实说明了配置步骤,
opencv、opencv_contrib及cuda联合编译详细教程_第17张图片
但是还有一个cuda,总的过程如下:
在search栏里输入extra,然后把opencv_contrib文件夹下的module添加进去
opencv、opencv_contrib及cuda联合编译详细教程_第18张图片
在search栏里输入non,在后面打勾,这个是使用nonfree模块
在这里插入图片描述
在search栏里输入cuda,把with_cuda打勾
opencv、opencv_contrib及cuda联合编译详细教程_第19张图片
在search栏里输入world,可以打勾,也可以不打,打勾会编译成一个opencv_world.lib,我没打,节省时间;但是后面配置opencv环境到vs上时添加lib就有点复杂,但是也只复杂一次
在这里插入图片描述
之后点击configure,如果出错继续看日志文件,然后重复操作,直到日志文件如下:
opencv、opencv_contrib及cuda联合编译详细教程_第20张图片
点击generate:
opencv、opencv_contrib及cuda联合编译详细教程_第21张图片中间多等等没事的,编译久是在下载文件,多半下载不到。还是继续看那个cmake日志文件,补充下载文件,如果觉得github上下载慢的话,给出opencv3.4.1的缺失文件的下载地址:
https://download.csdn.net/download/hhhhhh1ll/12304735

Generate完成后,开始VS编译过程

VS编译过程
用vs2017打开OpenCV.sln,由于之前cmake选择的是vs2017,所以用vs2017打开.
opencv、opencv_contrib及cuda联合编译详细教程_第22张图片
找到CmakeTargets,右键选择生成解决方案,等待生成完毕(Debug模式下会生成Debug库,release模式下会生成release库,所以要操作两次)
opencv、opencv_contrib及cuda联合编译详细教程_第23张图片
等待完成后,点击Install,然后右键生成。一个模式下就完成了。更换模式后,重复操作。直到生成完毕;

PS:这个时间比较久,至少需要几个小时。

拷贝出Install,这就时生成好的库,之后再配置环境变量以及属性表
opencv、opencv_contrib及cuda联合编译详细教程_第24张图片
拷贝出去,齐活完事!
环境变量配置就和之前配置opencv一样,不会的话看别人的教程吧!这个不难!!

你可能感兴趣的:(opencv,cmake,cuda,c++,window)