CUDA9.0+OpenCV3.1+OpenCV_contrub3.1+VS2015+Win10+TBB混合编译

折腾了两天,终于成功将环境配置上,过程还是遇到了很多问题,希望看到文章的人,可以少走弯路。

平台:Windows 10 

显卡:GTX 960

VS:vs2015 professional

软件资源库:
OpenCV 3.1   下载地址: https://opencv.org/opencv-3-1.html
TBB                下载地址:https://github.com/01org/tbb/releases
(如果你使用的是高版本的Cmake编译出错,可以尝试低版本,楼主用的是3.4.3版本)

1、安装cuda9.0

首先先查看自己的电脑显卡配置,是否支持cuda,查看显卡型号的方式,找到设备管理器,如下图所示。
也可以使用win+R,输入cmd,在命令窗口下输入 start devmgmt.msc,打开设备管理器。
去Nvidia官网CUDA支持 https://developer.nvidia.com/cuda-gpus 查看自己的显卡是否支持CUDA。

下载后安装,有 三个工具,全装上 ,装的时候不要有中文路径。建议cuda tookit安装到一个短一点的路径下。这个是你以后二次开发用的工具。楼主在默认路径下安装的,也可以自己更改路径安装。安装完建议 重启 一下。
安装完可以检查一下环境变量有木有配置好:桌面上此电脑右键属性->高级系统设置->高级系统属性->高级->环境变量->系统变量中的Path, 如果像 @下图 一样就是装好了:


在命令窗口下输入 nvcc -V
显示cuda信息则安装完成,如果报错则参考该博客方法解决: http://http://blog.sina.com.cn/s/blog_4b1452dd0102xbe8.html

2、安装OpenCV3.1 、OpenCV_contrib  、Cmake 、TBB

Cmake按照默认安装即可,至于其他几个安装包,解压在需要的路径即可。此处要强调一点是,OpenCV_contrib的版本选择,最好是选择与OpenCV相同的版本,下载地址: https://github.com/opencv/opencv_contrib

我解压的路径为:D:\Program Files\opencv_contrib-3.1.0
我的OpenCV解压路径为:D:\Program Files\opencv3.1  这个时候OpenCV库已经可以在VS里使用了,配置方法具体参照浅墨的博客:点击打开链接

3、Cmake 设置

进入正题,重编译阶段.

    1)首先打开CMake,源代码位置为OpenCV源码位置,输出位置为自己设定的位置,进行第一次配置(configure)

    并确定采用VS2015 x64,模式默认就行。我的设定位置为:D:\Program Files\MyOpenCV,如下图所示:
点击configure,等待生成结果。

生成过程中可能会出错,可能原因是cuda9不再支持2.0架构造成的,因此需要更改cmake编译文件,具体步骤参考以下链接: https://blog.csdn.net/u014613745/article/details/78310916
更改后才从新configure后,如果显示configure done,别着急点击generate ,先检查生成的信息有没有其他的错误。


如果提示    Error: MEXEXT: Unsupported platform.   只是没用到MATALB,将WITH_MATLAB勾选去掉即可。
由于之前安装了CUDA,如果一切配置正确,WITH_CUDA是默认勾选上的,检查其是否被勾选。检查CUDA相关文件夹的路径,版本等情况是否符合自己的要求。 确保BUILD_CUDA_STUBS 没有  被选中
WITH_TBB 勾选,重新configure一次
将TBB的include路径填入,我填入的是:D:\Program Files\tbb2018_20171205oss\include
再次configure后,出现

将TBB_LIB_DIR的路径改为,D:/Program Files/tbb2018_20171205oss/lib/intel64/vc14,方便后面build过程中,找到tbb_debug.lib文件。

注意:楼主在后续build过程中,提示 cmd.exe 错误。解决方案为: 将CIDA_GENERATION设为Kepler
现在configure后,不再报错,红色框都变成白色,基本没问题了。就点击Generate,显示生成generation done。大功告成。

4、VS2015编译

进入生成的工程文件夹,点击openCV.sln进入工程,里面包含刚刚通过Cmake的相应选项产生的未编译的工程,譬如在Cmake里勾选了BUILD_CORE,里面就会有opencv_core这个工程。同样由于我们选择了CUDA,里面就会有很多关于CUDA的工程文件。这些工程生成的lib就是和我们从网上下载下来的lib之间的主要区别。

首先检查自己的编译器是否是和Cmake选择的一致(譬如是64位不是32位),确定是debug版本还是release版本(如下图),依照http://www.cnblogs.com/asmer-stone/p/5530868.html提示的方法,可以先试一试关键的几个工程生成是否能够通过,譬如opencv_core, opencv_cudabgsegm等等,如果出现问题可以节省时间去分析和查找。
如果上述关键工程没问题,直接生成all_build 和install工程就可以了。由于存在cuda等文件,编译过程需要很久。
如果编译过程中遇到graphcuts.cpp 错误,参考网页: https://blog.csdn.net/tingyue_/article/details/53456597
更改graphcuts.cpp源码即可

编译完成后,会生成一个install文件,相当于原装opencv 里面的build文件,只要将opencv环境变量指定到这个文件夹下,就可以重新编译opencv了。
工程属性的 [输入->外部依赖项]需要重设 ,设成编译后的lib下所有.lib的文件名即可。

4、测试

利用VS新建一个C++控制台程序程序,如下图:

配置调试器。注意用 DEBUG x64 的,没有的话新建一个。
配置好工程属性中的 [包含目录]、[库目录]、[输入->外部依赖项]
修改main函数所在文件如下:

#include "stdafx.h"
#include <iostream>
#include <opencv2\core\cuda.hpp>

int _tmain(int argc, _TCHAR* argv[])
{
    cv::cuda::DeviceInfo _deviceInfo;
    bool _isDeviceOK = _deviceInfo.isCompatible();
    std::cout << "IsGPUDeviceOK : " << _isDeviceOK << std::endl;
    system("pause");
    return 0;
}

编译运行,如果检测到CUDA模块配置好了且GPU硬件设备正常,则会出现IsGPUDeviceOK:1,如下图:

references:

1、 《OpenCV官方文档》http://docs.opencv.org/3.0.0/d2/dbc/cuda_intro.html

猜你喜欢

转载自blog.csdn.net/huoguangyao/article/details/79914134