win10(x64) + opencv2.4.9 + cuda6.5(x64) + cmake3.0.2编译32位的opencv_gpu

近期在优化老项目的执行速度,考虑到比较耗时的部分是对图像处理的部分,因此考虑利用GPU加速处理。由于历史遗留问题,OpenCV的版本是比较老的2.4.9,同时项目是基于32位编译的,因此需要编译32位的OpenCV(GPU)。这个奇怪的搭配让我找了很多资料,遇到了很多坑,这里将成功的方案记录一下。
配置如下:

名称 版本 架构
Windows 10 x64
OpenCV 2.4.9 -
CUDA 6.5 x64
Cmake 3.0.2 x64
TBB 44 -
VS 2010 -

同款配置下载(待添加)

1、安装CUDA6.5

一路下一步就可以,安装完成后,检查一下是否安装成功。

nvcc -V

2、配置TBB

bin目录添加环境变量
include目录添加环境变量
↓↓↓–因为要编译32位的因此选择ia32文件夹–↓↓↓
lib/ia32/vc10目录添加环境变量
↑↑↑–因为项目是vs2010因此选择vc10–↑↑↑

3、安装OpenCV

选择合适的路径解压

4、Cmake编译OpenCV(GPU)

4.1配置OpenCV源码目录
4.2配置编译后输出目录
4.3勾选Advancedwin10(x64) + opencv2.4.9 + cuda6.5(x64) + cmake3.0.2编译32位的opencv_gpu_第1张图片
4.4点击Configure(重要)
选择Visual Studio 10 2010编译为32位
win10(x64) + opencv2.4.9 + cuda6.5(x64) + cmake3.0.2编译32位的opencv_gpu_第2张图片
4.5配置信息

取消勾选
BUILD_DOCS
BUILD_EXAMPLES
CUDA_ATTACH_VS_BUILD_RULE_TO_CUDA_FILE

勾选
WITH_CUBLAS
WITH_CUDA
WITH_OPENGL
WITH_TBB

点击Configure

4.6TBB目录(可能出现)
如果TBB目录还是红色,需要手动添加

名称 路径
TBB_LIB_DIR …/lib/ia32/vc10
TBB_STDDEF_PATH …/include/tbb/tbb_stddef.h

点击Configure

4.7当不出现红色项的时候就说明配置没问题了
点击Generate等待完成

5、生成OpenCV

5.1生成前准备
打开‘opencv-2.4.9\modules\gpu\src\nvidia\core\NCV.cu’加上 #include ,否则生成时会有错误

5.2编译 OpenCV.sln
5.2.1生成opencv_core
5.2.2生成opencv_gpu
5.2.3生成ALL_BUILD
5.2.4生成INSTALL

全部完成后就会在上边选择编译后输出文件夹内生成install文件夹,这就是以及被编译好的32位的OpenCV(GPU)

6、项目配置

6.1可执行文件目录:
6.1.1TBB
…/tbb44_20150424oss/bin/ia32/vc10

6.1.2CUDA
C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v6.5\bin

6.2包含目录:
6.2.1OpenCV(GPU)_include
…/install/include;

6.2.2OpenCV(GPU)_include_opencv
…/install/include/opencv;

6.2.3OpenCV(GPU)_include_opencv2
…/install/include/opencv2;

6.3库目录:
6.3.1OpenCV(GPU)_lib
…/install\x86/vc10/lib

7、测试示例

int num_device = gpu::getCudaEnabledDeviceCount();
if(num_device > 0)
{
	cout<< "GPU可用" << endl;
}
else
{
	cout<< "GPU不可用" << endl;
}

8、与其他版本CUDA兼容性

将项目配置完成后,迁移到装有CUDA10.1的设备上,发现缺少CUDA6.5的dll,直接将少的考过来放在exe文件同目录,竟然能运行!并且在执行过程中成功使用了GPU,意外收获,意外收获!
但是版本不一致会增加运算时间,还是建议使用对应版本!

9、结语

9.1为什么选择CUDA6.5而不是最新版本
CUDA9以后不在兼容OpenCV2.X。
测试过CUDA7.5在生成的时候报错**CMake Error: The following variables are used in this project, but they are set to NOTFOUND.**该问题是因为CUDA提供的某些DLL只有x64的,因此在选择编译x86的时候就报错。
测试过CUDA5/5.5,驱动在Win10上一直安装不上。

9.2为什么是32位
因为历史遗留问题,项目整体调整为64位难度比较大。

参考文章:
OPENCV2.4.9+CUDA6.5+VS2013 64位系统环境搭

你可能感兴趣的:(opencv,gpu,cuda,cmake)