CUDA6.5+VS2010+OpenCV2.4.9的环境搭建过程

写在前面

由于实验室项目的需要,需要用到OpenCV的GPU库,所以上论坛转了一圈,捣鼓了三五天,经过无数个坑,终于搭建好了这个环境,说实话都有点小佩服自己。

环境搭建的实质就是用Cmake结合Intel的tbb库外加CUDA把OpenCV的源码(sources目录下的代码)在VS上给重新编译一遍,生成能够在编写CUDA代码时候能够调用的头文件库文件。

1.环境搭建的材料

CUDA6.5

VS2010

OpenCV2.4.9

Cmake3.9.1

tbb4,3


注释:具体的版本可以有差别,只不过需要注意下载的最好都是x64或者x86的,免得出现不兼容的麻烦。

2.搭建过程

2.1 默认你已经安装了CUDA6.5+VS2010的环境,如果没有可以参看我之前的一篇。

CUDA6.5+VS2010安装和搭建过程 点击打开链接

其实也没啥,就是有点耗时间。

2.2 安装OpenCV和Cmake以及tbb4.3

其中OpenCV是解压安装,记得解压到容易找到的地方就行了。

tbb4.3也是一步一步安装了就好,完了把bin路径添加到环境变量path里就行。

我的是D:\Program Files\tbb43\bin

Cmake在安装的时候记得勾选add cmake to the system path for all users选项。

完了会在开始菜单里出现一个GUI。

2.3 打开Cmake的GUI。

在“where is the source code”下指定OpenCV的源码所在路径,在“where  to build”下是将来的存放路径(VS2010是自己建的)。勾选Advanced,之后点击Configure.


2.4 点击configure,之后会出现平台选择,我的是选择Visual Studio 2010 win64,点击finish.


2.5 出现的一片红色中,勾选BUILD_EXAMPLES, WITH_CUDA, WITH_TBB, WITH_CUBLAS, WITH_OPENGL剩下的就不要动了。还有人提到,为了加快编译速度,在CUDA_ARCH_BIN修改为2.1(该选项是根据GPU计算能力来选择的,我的计算能力为2.1)。我没有这么干,感觉也没啥关系。


2.6 再次点击configure,出现TBB路径未找到的问题,(红色标出),点击确定TBB的路径,我的为D:\Program Files\tbb43\include,再次点击configure,出现的红色两条要求配置TBB的lib路径和一个头文件的路径,默认已经找到,再次点击configure,若没有红色出现,且信息框中出现使用CUDA,TBB等信息后,再点击Generate,会在目标路径中生成OpenCV.sln文件,点击打开该文件。



至此,为编译源码的工作空间就已经建立好了,Cmake需要退出历史舞台,轮到VS2010出场了。

2.7 确定VS2010的状态为Debug x64,在视图--->属性管理器中找到ALL_BUILD,在Debug|x64(不是Microsft.Cpp.x64.user中,这里插播一条关于OpenCV配置的知识,在Microsft.Cpp.x64.user中的配置是默认配置,你在这上面修改会导致之后所有的项目都会继承此项配置,到后面会导致debug和release下的配置,修改一个另一个也会变,这样很麻烦)中双击,弹出属性配置页。

在可执行文件目录中,将
D:\Program Files\tbb43\bin\intel64\vc10
C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v6.5\bin
在包含目录中,将
D:\Program Files\tbb43\include
C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v6.5\include
在库目录中,将
D:\Program Files\tbb43\lib\intel64\vc10
C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v6.5\lib\x64

以此添加,选择保存。


2.8 配置好后,切回解决方案资源管理器中,在解决方案‘OpenCV’中,右击,重新生成解决方案。接下来开始了漫长的等待过程。在编译gpu模块时非常的慢。整个过程耗时视显卡计算能力和电脑配置而定,我的笔记本大概3个小时吧。


2.9 等编译完成后(总会有那么几个不成功的,如果数量太多就需要重来了。这里如果前面在Cmake没有勾选BUILD_EXAMPLES,那么任务数量只有60多个,但是成功率不高,会有很多不成功,不要问我是咋知道的),在CMakeTargets文件夹下的INSTALL中,右击,选择生成选项,又是一个漫长的等待过程,大概40-50分钟。

这个过程完成后,就完成了debug模式下的lib和dll文件的生成。会在install文件夹下的x64文件夹中:

D:\Program Files\opencv\VS2010\install\x64\vc10


2.10 这时候前辈的建议这时候可以先不急着编译release模式,你可以先验证一下debug模式下的编译是否正确。

将自己编译生成的dll文件的目录添加到环境变量path中:D:\Program Files\opencv\VS2010\install\x64\vc10
之后,新建一个VS2010项目,在该项目中,将自己编译好的opencv的lib文件配置添加进去,
在debug x64模式下,VC++目录中配置包含目录:
D:\Program Files\opencv\install\include
D:\Program Files\opencv\install\include\opencv
D:\Program Files\opencv\install\include\opencv2
在库目录中添加:
D:\Program Files\opencv\install\x64\vc10\lib

添加lib文件 属性页,链接器,输入,附加依赖项带有d的是Debug,以下是debug的,不带d的是Release版本的。(参考OpenCV配置)

这里有点头疼的是,就算这里指定了路径,测试时候还是会提示找不到dll文件,最后没法子,只好把这些lib文件放到了C\:windows\System32下。

编写源文件,运行。测试程序如下:

#include <iostream>
#include "opencv2/opencv.hpp"
#include "opencv2/gpu/gpu.hpp"

int main (int argc, char* argv[])
{
	try
	{
		cv::Mat src_host = cv::imread("C:\\Users\\Public\\Pictures\\Sample Pictures\\Desert.jpg");
		cv::gpu::GpuMat dst, src;
		cv::Mat result_host;
		src.upload(src_host);

		cv::gpu::cvtColor(src,dst,CV_BGR2GRAY);
		cv::gpu::threshold(dst, dst, 128.0, 255.0, CV_THRESH_BINARY);

		dst.download(result_host);
		//cv::Mat result_host = dst;
		cv::imshow("Result", result_host);
		cv::waitKey();
	}
	catch(const cv::Exception& ex)
	{
		std::cout << "Error: " << ex.what() << std::endl;
	}
	//	cv::imshow("result",src_host);
	//	cv::waitKey();
	return 0;
	system("pause");
}
运行结果如下:



说明debug模式下配置正确,接下来可以配置release模式,方法同上,注意将平台切换为Release x64即可。
需要注意的是,在编译过程总,如果出现关于宏的对话框,选择cancle,其他的对话框点击yes,要求重新加载的忽略。





3 搞定

总之,最后生成的install下的文件就是你的新的OpenCV路径,你需要把它当成OpenCV使用就可以了。对了,原则上每次配置完path路径都需要重启的,有时候忘了似乎也没啥影响。

参考:

Win64平台CUDA6.5+VS2010+opencv2.4.8配置

OPENCV2.4.9+CUDA6.5+VS2013 64位系统环境搭建

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值