折腾了两天,终于成功将环境配置上,过程还是遇到了很多问题,希望看到文章的人,可以少走弯路。
平台:Windows 10
显卡:GTX 960
VS:vs2015 professional
软件资源库:
OpenCV 3.1 下载地址: https://opencv.org/opencv-3-1.html
TBB 下载地址:https://github.com/01org/tbb/releases
Cmake3.4.3 下载地址: http://http://xiazai.zol.com.cn/detail/44/433377.shtml
(如果你使用的是高版本的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,如下图所示:
生成过程中可能会出错,可能原因是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
#include
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