Opencv3.4与Opencv_contrib模块联合编译,生成使用CUDA加速的Opencv GPU模块

出于稳定性考虑,Opencv3官方一直没有加入Opencv2中存在的模块,比如像feature2d模块,其中包含了SURF、SIFT这些经典的图像算法。如果想要在Opencv3中使用这些算法,要自己动手从Opencv_contrib模块中编译生成库使用。而今天想要说的重点是用Opencv3.4与Opencv_contrib模块联合编译,生成能够使用CUDA加速的GPU模块,也就是俗称的Opencv GPU版

做图像这方面工作的小伙伴应该都会有一个困扰,当需要用稍复杂一点的算法处理实时性要求非常高的图像的时候,比如处理高清数字视频流,就经常会出现卡顿,处理跟不上播放速度。按理说这样专业的应用应该用专门DSP平台完成,但是毕竟不是每个PC平台的工程师都懂DSP的啊~所以采用能够使用CUDA加速的GPU模块在一定程度上能够解决这种尴尬的局面。当然也不是说GPU版的Opencv 就一定快,它的使用还有很多门道,使用不当可能速度还不如cpu版的呢。使用什么的现在先不说了,现在先来看怎样把GPU版的opencv变得可用。

准备工具:

  1. 编译神器CMake,这个建议下一个GUI版的,好操作,我这里用的是CMake 3.11
  2. IDE平台VS2015,或者VS2013,VS2017都可以
  3. CUDA9.0或者8.0都可以,正确安装好
  4. opencv的源码,就是opencv文件夹下的source文件夹,还有opencv_contrib源码,建议从github上获取,注意版本的对应,这里我用的是opencv3.4,所以opencv_contrib也是3.4的。下载网址:https://github.com/opencv

第一阶段:使用CMake编译

选好opencv的源码,就是那个source文件夹的位置,再选好你想把这个库编译到哪里,我直接把它放到了D:/opencv_contrib3.4,这个随个人习惯。选好之后点configure,如果这个文件夹不存在它会提示你新建,确定。

Opencv3.4与Opencv_contrib模块联合编译,生成使用CUDA加速的Opencv GPU模块_第1张图片

接下来是关键的一步,选你的VS版本,这里一定要选对是哪一版,2015还是2017,32位还是64位,不然后面会出现奇奇怪怪的错误。我这里用的是64位的VS2015。建议都使用64位的,好像官方的opencv3都不支持32位的,从来没有见过。

Opencv3.4与Opencv_contrib模块联合编译,生成使用CUDA加速的Opencv GPU模块_第2张图片

点Finished,等读条,生成工程。完成后可以检查一下窗口下部的框,如果正确安装好了CUDA,会有CUDA detected+版本号的信息。

Opencv3.4与Opencv_contrib模块联合编译,生成使用CUDA加速的Opencv GPU模块_第3张图片

然后添加OPENCV_EXTRA_MODULES_PATH的信息,这个路径就是你下载的opencv_contrib源码解压后存放的文件夹中的modules文件夹路径。我把它放到了D:\opencv_contrib_3.4.0,所以在CMake中的OPENCV_EXTRA_MODULES_PATH中就填写D:/opencv_contrib_3.4.0/modules。文件路径一定要注意“ / ”和 “\” ,CMake是Linux风格,它只认 “/”。

Opencv3.4与Opencv_contrib模块联合编译,生成使用CUDA加速的Opencv GPU模块_第4张图片

Opencv3.4与Opencv_contrib模块联合编译,生成使用CUDA加速的Opencv GPU模块_第5张图片

确认好之后再次configure,等一会读条完了会看到configuring done,之后再点generate,都完了之后会有Configuring done和Generating done两行。如下图:


至此,第一阶段使用CMake的工作结束。


第二阶段:使用VS生成lib库

关掉CMake,在第一阶段开始指定的编译存放文件夹D:/opencv_contrib3.4中找到CMake为我们生成的VS解决方案OpenCv.sln文件,双击用VS2015打开。点生成->重新生成解决方案,然后就是漫长的等待。根据PC不同的配置,从2、3个小时到7、8个小时不等。。。

Opencv3.4与Opencv_contrib模块联合编译,生成使用CUDA加速的Opencv GPU模块_第6张图片

编译好后,找到解决方案目录里的CMakeTargets项展开的INSTALL项,右键->仅用于项目->仅生成INSTALL。这时在D:\opencv_contrib3.4\install\x64\vc14生成了编译好的库(默认生成debug的库,修改为release编译生成release的库)。

Opencv3.4与Opencv_contrib模块联合编译,生成使用CUDA加速的Opencv GPU模块_第7张图片

Opencv3.4与Opencv_contrib模块联合编译,生成使用CUDA加速的Opencv GPU模块_第8张图片

到此,第二阶段用VS生成lib库的工作完成。


第三阶段:配置opencv GPU模块

在想使用opencv GPU模块时,要特别设置项目属性的VC++目录,就是一开始设置的那个存放库的 文件夹的install文件夹中的内容

首先添加path环境变量:D:\opencv_contrib3.4\install\x64\vc14\bin,这里有运行所需的dll文件

包含目录:

D:\opencv_contrib3.4\install\include\opencv;

D:\opencv_contrib3.4\install\include\opencv2;

D:\opencv_contrib3.4\install\include;

库目录:

D:\opencv_contrib3.4\install\x64\vc14\lib


Opencv3.4与Opencv_contrib模块联合编译,生成使用CUDA加速的Opencv GPU模块_第9张图片

Opencv3.4与Opencv_contrib模块联合编译,生成使用CUDA加速的Opencv GPU模块_第10张图片

然后,链接器->输入->附加依赖项 中输入

opencv_aruco340d.lib
opencv_bgsegm340d.lib
opencv_bioinspired340d.lib
opencv_calib3d340d.lib
opencv_ccalib340d.lib
opencv_core340d.lib
opencv_cudaarithm340d.lib
opencv_cudabgsegm340d.lib
opencv_cudacodec340d.lib
opencv_cudafeatures2d340d.lib
opencv_cudafilters340d.lib
opencv_cudaimgproc340d.lib
opencv_cudalegacy340d.lib
opencv_cudaobjdetect340d.lib
opencv_cudaoptflow340d.lib
opencv_cudastereo340d.lib
opencv_cudawarping340d.lib
opencv_cudev340d.lib
opencv_datasets340d.lib
opencv_dnn340d.lib
opencv_dpm340d.lib
opencv_face340d.lib
opencv_features2d340d.lib
opencv_flann340d.lib
opencv_fuzzy340d.lib
opencv_highgui340d.lib
opencv_img_hash340d.lib
opencv_imgcodecs340d.lib
opencv_imgproc340d.lib
opencv_line_descriptor340d.lib
opencv_ml340d.lib
opencv_objdetect340d.lib
opencv_optflow340d.lib
opencv_phase_unwrapping340d.lib
opencv_photo340d.lib
opencv_plot340d.lib
opencv_reg340d.lib
opencv_rgbd340d.lib
opencv_saliency340d.lib
opencv_shape340d.lib
opencv_stereo340d.lib
opencv_stitching340d.lib
opencv_structured_light340d.lib
opencv_superres340d.lib
opencv_surface_matching340d.lib
opencv_text340d.lib
opencv_tracking340d.lib
opencv_video340d.lib
opencv_videoio340d.lib
opencv_videostab340d.lib
opencv_xfeatures2d340d.lib
opencv_ximgproc340d.lib
opencv_xobjdetect340d.lib
opencv_xphoto340d.lib
kernel32.lib
user32.lib
gdi32.lib
winspool.lib
comdlg32.lib
advapi32.lib
shell32.lib
ole32.lib
oleaut32.lib
uuid.lib
odbc32.lib
odbccp32.lib

Opencv3.4与Opencv_contrib模块联合编译,生成使用CUDA加速的Opencv GPU模块_第11张图片

保存后,配置就完成了。至此Opencv3.4与Opencv_contrib联合编译,生成使用CUDA加速的Opencv GPU模块的全部工作就结束了。具体这个模块如何使用,请听下回分解~

PS:这个编译是完全编译,其实已经包括了开头所说xfeature2d等模块,使用时只需改变一下依赖的lib就可以了。还有如果觉得自己完成太花时间的话,这里附上我花了一晚上编译好的成品——include和install文件夹,可以直接用,点这里

你可能感兴趣的:(Opencv3.4与Opencv_contrib模块联合编译,生成使用CUDA加速的Opencv GPU模块)