踩坑无数天,科学上网找到解决方案。
所需软件下载地址:
NVIDIA驱动:https://www.geforce.cn/drivers 本人是gtx1070,一般用的也都是gtx系列的,让网页自动检查你的显卡给你推荐驱动就行
CUDA:https://developer.nvidia.com/cuda-downloads,想找不同版本的需要点legacy release
VS2015:这个只能自己想办法了
TBB: https://github.com/01org/tbb/releases,我下的是tbb2018_20171205oss
OPENCV:http://opencv.org
这里默认VS自己安装好了
----------------------------------------------------------------------------------------------------------------------------------------------------
先说配置CUDA
首先安装NVIDIA驱动,让网页自动检查即可,下了都默认安装就可以了
然后安装CUDA,选择Windows,x86_64,10,exe[local],然后下载第一个,即cuda_8.0.61_win10.exe。
直接双击安装,全部都默认即可。
安装完成以后,配置环境变量。
在系统变量中添加:
CUDA_PATH = C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v8.0
CUDA_PATH_V8_0 = C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v8.0
上面两个自己就有了
CUDA_SDK_PATH = C:\ProgramData\NVIDIA Corporation\CUDA Samples\v8.0
CUDA_LIB_PATH = %CUDA_PATH%\lib\x64
CUDA_BIN_PATH = %CUDA_PATH%\bin
CUDA_SDK_BIN_PATH = %CUDA_SDK_PATH%\bin\win64
CUDA_SDK_LIB_PATH = %CUDA_SDK_PATH%\common\lib\x64
这五个需要自己添加
添加好以后在系统变量中的PATH里添加:
%CUDA_LIB_PATH%
%CUDA_BIN_PATH%
%CUDA_SDK_BIN_PATH%
%CUDA_SDK_LIB_PATH%
改完之后重启一次
----------------------------------------------------------------------------------------------------------------------------------------------------
然后是TBB
解压好以后,直接添加环境变量即可
在用户变量的PATH中添加:
D:\configuration\tbb2018_20171205oss\include
D:\configuration\tbb2018_20171205oss\bin\intel64\vc14
在系统变量的PATH中添加:
D:\configuration\tbb2018_20171205oss\bin\intel64\vc14
改完之后重启一次
----------------------------------------------------------------------------------------------------------------------------------------------------
然后是利用CMAKE去编译OPENCV,这也是最容易出问题的一步。我选的opencv都是只能在x64下编译生成的。
首先说OPENCV2,也是我遇到最无解问题的一个版本,借助科学上网看了很多才解决
我选用的是OPENCV2.4.13.2,
解压以后,在source里面找到CMAKELISTS.TXT,在里面加上这个
if (WIN32)
ADD_DEFINITIONS(-DWIN32_LEAN_AND_MEAN)
endif (WIN32)
如果这项不做,之后做出来的东西有可能报错 identifier"IUnknown" is undefined.
并且注释掉set(OPENCV_VCSVERSION "unknown")
加上set(OPENCV_VCSVERSION "2.4.13.2")
否则由于检查不到版本号,cmake会warning你,强行无视则会在vs里报错
打开cmake,选择好路径,点一次configure,选择vs14 win64,vs14指的就是vs2015。
然后取消选择BUILD_DOCS 和‘BUILD_EXAMPLES,取消掉BUILD_PERF_TESTS,检查WITH_CUDA,加上WITH_CUBLAS WITH_OPENGL WITH_TBB。
之后再点一次configure,检查一下TBB路径对不对,我一般懒得检查好像也不会出错。
最后再点一次configure,如果有红色,检查配置是否有问题。没有红色了,就可以点generate了。
找到自己选择的生成opencv+cuda的目录,打开Opencv.sln,不用改x64为x86,因为你在cmake里选的就是win64,乱改会报错。在debug模式下,先生成opencv_core和opencv_gpu试一试,如果出问题先解决一下,主要容易出问题的也是这俩。没问题以后生成ALL_BUILD,ok以后在生成INSTALL。到这一步没问题基本就没问题了,然后换release再走一遍。
然后就是在vs里配置opencv了,这个放到最后再说,先说opencv3如何配置。
opencv3我选择的是opencv3.3.1,不过有些功能在contrib里面,所以需要在github上面下载对应版本的contrib。
下完以后,打开cmake,仍然和上面一样选择路径之类的选项,点configure选择内容不变。
然后去掉BUILD_PERF_TESTS,加上OPENCV_EXTRA_MODULES,检查WITH_CUDA,去掉WITH_MATLAB,加上WITH_TBB。不去掉所述两项后面在vs里生成的时候会报错,而且这两项实际上不太影响使用。
再点configure,把该填的路径报错tbb的还有contrib的都填好,然后在configure几次,没有红色了点generate。
同样打开opencv.sln,这里有一点不一样的是,我们要先试一下opencv_core, opencv_bioinspired, opencv_cudaarithm, opencv_cudabgsegm,这几个是生成慢而且容易出问题的。
在debug模式下生成一次ALL_BUILD和INSTALL,再在release模式下生成一次ALL_BUILD和INSTALL。
生成完毕以后最大的难关就通过了。
配置环境变量:
在PATH中添加:opencv_path\install\x64\vc14\bin;
重启电脑
----------------------------------------------------------------------------------------------------------------------------------------------------
然后就是配置VS属性了
在属性管理器里面更改可以使其对新建的所有项目默认生效。
注意要改的是release或是debug的x64版本,x86是用不了这些的。
VC++目录 下的:
包含目录 添加以下内容:
opencv_path\install\include
opencv_path\install\include\opencv
opencv_path\install\include\opencv2
库目录 添加以下内容:
opencv_path\install\build\x64\vc14\lib
在链接器 下的 输入->附加依赖项 添加:
若是opencv2,则为
cudart.lib
opencv_imgproc2413.lib
opencv_calib3d2413.lib
opencv_contrib2413.lib
opencv_core2413.lib
opencv_features2d2413.lib
opencv_flann2413.lib
opencv_gpu2413.lib
opencv_highgui2413.lib
opencv_legacy2413.lib
opencv_ml2413.lib
opencv_nonfree2413.lib
opencv_objdetect2413.lib
opencv_ocl2413.lib
opencv_photo2413.lib
opencv_stitching2413.lib
opencv_superres2413.lib
opencv_ts2413.lib
opencv_video2413.lib
opencv_videostab2413.lib
若是opencv3,则为
opencv_aruco331.lib
opencv_bgsegm331.lib
opencv_bioinspired331.lib
opencv_calib3d331.lib
opencv_ccalib331.lib
opencv_core331.lib
opencv_cudaarithm331.lib
opencv_cudabgsegm331.lib
opencv_cudacodec331.lib
opencv_cudafeatures2d331.lib
opencv_cudafilters331.lib
opencv_cudaimgproc331.lib
opencv_cudalegacy331.lib
opencv_cudaobjdetect331.lib
opencv_cudaoptflow331.lib
opencv_cudastereo331.lib
opencv_cudawarping331.lib
opencv_cudev331.lib
opencv_datasets331.lib
opencv_dnn331.lib
opencv_dpm331.lib
opencv_face331.lib
opencv_features2d331.lib
opencv_flann331.lib
opencv_fuzzy331.lib
opencv_highgui331.lib
opencv_img_hash331.lib
opencv_imgcodecs331.lib
opencv_imgproc331.lib
opencv_line_descriptor331.lib
opencv_ml331.lib
opencv_objdetect331.lib
opencv_optflow331.lib
opencv_phase_unwrapping331.lib
opencv_photo331.lib
opencv_plot331.lib
opencv_reg331.lib
opencv_rgbd331.lib
opencv_saliency331.lib
opencv_shape331.lib
opencv_stereo331.lib
opencv_stitching331.lib
opencv_structured_light331.lib
opencv_superres331.lib
opencv_surface_matching331.lib
opencv_text331.lib
opencv_tracking331.lib
opencv_video331.lib
opencv_videoio331.lib
opencv_videostab331.lib
opencv_xfeatures2d331.lib
opencv_ximgproc331.lib
opencv_xobjdetect331.lib
opencv_xphoto331.lib
cudart.lib
如果用不同的版本,注意要改版本号,如果要用debug版本,所有.lib前面加一个d,除了cudart.lib以外。