加载中…
个人资料
Felix
Felix
  • 博客等级:
  • 博客积分:0
  • 博客访问:287,430
  • 关注人气:48
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
相关博文
推荐博文
谁看过这篇博文
加载中…
正文 字体大小:

win7 64位+VS2010+OpenCV2.4.9 GPU 模块的配置

(2015-06-22 04:31:09)
标签:

it

分类: 数字图像处理
近期由于课题需要使用GPU进行加速,通过调研决定采用OpenCV 的GPU 支持,通过整整一天的摸索,终于配置成功。
 
1. 系统环境
 windows 7 ultimate版 64位+ visual studio 2010 ultimate版+OpenCV 2.4.9+CUDA ToolKit 6.5+CMake2.8.8

2. 配置过程
 大致流程:CUDA Toolkit 6.5的下载与安装--> CMake的下载与安装--> OpenCV的下载与编译-->测试是否安装成功

  2.1 CUDA ToolKit 6.5的下载与安装
   由于之前测试直接使用OpenCV的预编译的版本,无法使用其GPU模块,因此需要安装CUDA Toolkit之后,使用自己的基于CUDA 编译的OpenCV 库。
   由于自己配置时,CUDA ToolKit版本是7.0,于是尝试了一下,结果不成功,原因估计是Opencv2.4.9的gpu模块对最新的CUDA支持不够完善,因此在选择CUDA 版本时,一定要考虑OpenCV对其的兼容性。自己的一个经验是到 http://code.opencv.org/projects/opencv/wiki/ChangeLog 看一下自己的OpenCV 版本发布的时间;再到CUDA下载的页面找一个发布时间与OpenCV发布时间相近的版本;选择合适的版本很重要;自己花费的主要时间就浪费在版本不兼容上~~~
   自己使用的是CUDA ToolKit 6.5,根据自己的系统,计算需求,下载对应的版本,一路安装就可以了。这个问题应该都不大,主要是确定OpenCV 与CUDA 的兼容性。

  2.2 CMake 工具的下载与安装
    到http://www.cmake.org/files/ 下载任何自己需要的版本(虽然我的win7系统是64位的,但是只有32位的CMAKE 供下载,cmake-2.8.8-win32-x86.exe, 这个对后面的编译木有影响),我使用的是2.8.8,下载完成,安装就OK~~

  2.3 OpenCV的下载与编译
      到OpenCV的主页上找到对应的版本2.4.9,下载Opencv for windows ,安装到自己的目录,比如D:\OpenCV;然后使用CMake工具编译基于CUDA和TBB的OpenCV库,这个过程可以参看,
     这篇文章写得很详细,而且图文并茂,很好懂,虽然这篇文章的OPENCV及vs版本不同,但是VS2010按照他的过程来编译也是可以顺利通过的;
     需要的注意的是
      1) 在配置CMake的时候选择VS10 WIN64(根据自己的操作系统和VS版本选择); 勾选WITH_TBB,WITH_CUDA
      2) 把debug和release两个版本都编译上;编译的时间比较长(视电脑性能,自己编译花了),耐心等待~~~
      3)在编译过程中可能会弹出对话框  是否要 reload the solution when a CMakeLists.tx has changed, 这个可能是个bug,是CMake的宏造成的,所以可以再编译前检查一下是否有这样额的宏,VS2010中  (Tools)工具--》(Macros)宏--》(Macro explorer)宏查看器-》CMakeVSMacros2(也可能是其他的目录)找到 Public Sub ReloadProjects(Optional ByVal projects As String = "") 与Public Sub StopBuild(Optional ByVal projects As String = "")这两个函数,它们应该是VB写的,把函数体注释掉就可以了;
   
  2.4 测试是否安装成功
  安装完成后,新建一个WIN32项目,注意配置一下使用x64选项进行编译;如果安装成功 int devNum=cv::gpu::getCudaEnabledDeviceCount();将返回非0值,否则说明配置为成功

#include "stdafx.h"
#include
#include "opencv2/opencv.hpp"
#include "opencv2/gpu/gpu.hpp"

int _tmain(int argc, _TCHAR* argv[])
{
int devNum=cv::gpu::getCudaEnabledDeviceCount();
   
try
{
cv::Mat src_host = cv::imread("lena.jpg", CV_LOAD_IMAGE_GRAYSCALE);
cv::gpu::GpuMat dst, src;
src.upload(src_host);

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

cv::Mat result_host;
dst.download(result_host);
cv::namedWindow("Result",1);
cv::imshow("Result", result_host);
cv::waitKey();
}
catch(const cv::Exception& ex)
{
std::cout << "Error: " << ex.what() << std::endl;
}
return 0;
}

    
参考文献
【1】 http://www.cnblogs.com/freedomshe/archive/2013/01/11/win7_vs2012_opencv_rebuild.html
【2】http://blog.csdn.net/kelvin_yan/article/details/38866795

     




0

阅读 评论 收藏 转载 喜欢 打印举报/Report
  • 评论加载中,请稍候...
发评论

    发评论

    以上网友发言只代表其个人观点,不代表新浪网的观点或立场。

      

    新浪BLOG意见反馈留言板 电话:4000520066 提示音后按1键(按当地市话标准计费) 欢迎批评指正

    新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 会员注册 | 产品答疑

    新浪公司 版权所有