您的位置:首页 > 运维架构

用CMake和VS2008生成带CUDA模块的OpenCV2.2

2011-05-26 15:44 519 查看
By RaySaint 2011/5/26

OpenCV2.2版本也出来不久,官方更新上说这个版本支持GPU(OpenCV2.2自带的例子里有GPU版本的用于行人检测的HOG算法)。由于GPU模块是用CUDA写的,所以意味着它是与硬件相关的(只有支持英伟达(Nvidia)CUDA的显卡才能使用这个模块)。

如果你直接从OpenCV的项目主页上下载已经编译好且打成Windows安装包的OpenCV-2.1.0-win32-vs2008.exe并安装,这个是默认不支持CUDA模块的,所以即使你有支持CUDA的显卡,运行自带的测试CUDA的样例程序,会提示你CUDA模块没有安装。

如果你要使用CUDA模块,必须下载OpenCV2.2源代码的压缩包OpenCV-2.2.0-win.zip,当然也可以从OpenCV SVN中获得最新的源代码(这个更好,因为毕竟OpenCV2.2的GPU模块刚出来,也在不断改进中)

下面介绍如何编译带CUDA模块的OpenCV2.2并进行测试。

我的环境及准备工作:

操作系统:Win7 32位

编译环境:VS2008

CUDA:

GPU: GeForce 9800 GT

CUDA Toolkit version 3.2

CUDA SDK version 3.2

NVIDIA NPP version 3.2

当然,下面的东西是必需的:

OpenCV2.2(解压OpenCV-2.2.0-win.zip获得)

CMake-这是一个交叉编译工具,你需要它来配置和生成OpenCV.sln(Visual Studio 解决方案文件)

确保上面的都已准备或安装好。下面我们就用CMake生成带GPU模块的生成OpenCV库的VS2008工程。

用CMake生成OpenCV.sln

解压OpenCV-2.2.0-win.zip到"F:\OpenCV\OpenCV-2.2.0"(这个路径可以自己决定,不要带空格和中文字符),打开CMake:





在Where is the souce code中输入你OpenCV2.2源码所在的位置例如“F:\OpenCV\OpenCV-2.2.0”,并且指定生成的工程OpenCV.sln文件和你想要生成所有文件所在的目录。我指定的位置是”F:\OpenCV\OpenCV-2.2.0\build”。

上面的步骤完成后,点击Configure按钮。出现一个带下拉列表的对话框,选择”Visual Studio 9 2008 ”并点击Finish。

接着会出现一张显示各种可用选项的表。向下滚动找到选项”WITH_CUDA”,勾选它并且再次点击配置按钮:





当你重新配置后,你很有可能看到一堆红色高亮区域表明发生的一些错误,这些错误一般是因为你机器上安装的NPP、CUDA Toolkit和CUDA SDK的路径找不到。你很有可能看到





这些选项和GPU模块有关,所以一定要保证它们的路径正确。从CUDA_COMPUTE_CAPABLITIES可以看出,默认的情况下,所有的CUDA源文件会在计算能力1.1, 1.2, 1.3和2.0的架构下被编译,你可以改变它到任何指定的版本。CUDA_NPP_LIBRARY_ROOT_DIR-NOTFOUND说明你没有指定正确的NPP路径。我的NPP安装在”F:\CUDA\npp_3.2.16_win_32”。这里你需要指定为<NPP_DIRECTORY>/SDK,这里<NPP_DIRECTORY>在我的机器上就是”F:\CUDA\npp_3.2.16_win_32”。

同时也请确认CUDA Toolkit和 SDK路径也是正确的。然后重新点击Configure按钮,如果错误都被解决,则你会看到底部出现Configuring Done的消息:





现在点击Generate并且等待一会儿,OpenCV.sln解决方案文件会在你前面指定的生成目录里出现!如果没有错误,则你会看到Generating Done的消息:





在VS2008中编译OpenCV.sln解决方案

确认你的CUDA的include,bin和libs路径加入到了Visual Studio的搜寻路径中。打开OpenCV.sln,在左边的项目资源管理器中,找到opencv_gpu这个项目,选中它并点击右键,选择属性,在属性页下找到C/C++这个栏目下的代码生成(Code Generation)这一项,依据你的配置(Debug或Release)确定你的运行时库是多线程调试(Multithreaded Debug)多线程(Multithreaded)。同时找到连接器(Linker)里面的输入(Input)这一项,找到忽略指定库这一行,增加libc、libcmt和libcmtd,如下图所示:





点击OK并且开始生成整个解决方案。等待一段时间(可以去干点别的事)直到工程编译完成。如果全部步骤都没有错误,则生成的lib文件会在”F:\OpenCV\OpenCV-2.2.0\build\lib\Debug(或Release)”路径下,生成的dll文件会在”F:\OpenCV\OpenCV-2.2.0\build\bin\Debug(或Release)”路径下。你可以把它们拷贝出来放在自己指定的位置下。

测试OpenCV GPU模块

现在确认为了确认GPU模块能够工作,创建一个测试项目(例如win32 console application),增加一个C++源文件并且键入以下代码

#include <iostream>

#include "opencv2\gpu\gpu.hpp"

#include "opencv2\opencv.hpp"

int main()

{

try

{

cout << cv::gpu::getDeviceName(0);

}

catch(const cv::Exception& ex)

{

std::cout << "Error:" << ex.what() << endl;

}

system("PAUSE");

return 0;

}

如果你成功生成了带CUDA模块的OpenCV2.2,这段代码检测你的GPU的名字并输出到控制台。

另外你也可以试一下OpenCV2.2自带的gpu例子,位于”F:\OpenCV\OpenCV-2.2.0\build\bin\Release”路径下的opencv_test_gpu.exe,它会检测你的GPU并运行数个GPU版本的算法。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  职场 休闲 CUDA OpenCV2.2