Cuda 5.5 + Qt5 + opencv 2.4.8 使用cmake+vs2012编译GPU加速的opencv

原创 2014年03月03日 21:08:19

花了4天终于编译完成,各种错误各种google,写下来以助后人。

一、生成解决方案


1、安装cmake、opencv、tbb、cuda 、qt5。注意cuda、qt5的版本和操作系统。


2、打开cmake,设置源代码和编译的二进制文件的目录;编译过程需要足够的存储空间,大概13G左右,所以要确保二进制文件目录所在磁盘足够大。


点击“configure”,选择相应的编译器;


3、勾选BUILD_EXAMPLES WITH_TBB WITH_CUDA WITH_Qt 再Configure(注 建议勾选 WITH_CUBLAS ,据称有时不勾选该项会出错)
出现下图(怀疑是我没配置QT路径问题),不出现则跳过,出现则配置


qmake在如下路径中
其余都在C:/Qt/Qt5.2.1/5.2.1/msvc2012_64/lib/cmake/目录下,点击configure
出现


Qt5OpenGL也在目录C:/Qt/Qt5.2.1/5.2.1/msvc2012_64/lib/cmake/内
TBB_INCLUDE在tbb目录下:C:/tbb/include,再次configure
无红色选项时,表示configure成功。

4、由于这样直接生成的解决方案需对不同的GPU架构分别编译,编译时间过长(数小时),
建议针对所用显卡进行配置(据称可达原时间六分之一):
找到如下两项


清空CUDA_ARCH_PTX,将CUDA_ARCH_BIN中仅保留所需GPU架构,
确定所需架构,请查询https://developer.nvidia.com/cuda-gpus
重新configure。(建议使用以上方法先编译一边,确定没有错误,再为所有架构重新编译,花了四天的时间得到的教训)
点击“Generate”,进行生成,出现大片警告,不必理会。



二、编译解决方案


1、在目标文件夹中打开OpenCV.sln,配置ALL_BUILD项目属性


配置tbb的目录:
可执行文件目录 C:\tbb\bin\intel64\vc11
包含目录 C:\tbb\include
库目录 C:\tbb\lib\intel64\vc11

2、有时编译后会出现 LNK error 找不到 python27_d.lib 问题(我们使用的编译好的python不提供 _d.lib文件),建议编译前配置好。
 
在外部依赖项中找到pyconfig.h ,并修改代码

 将pragma comment(lib,"python27_d.lib")改成pragma comment(lib,"python27.lib")
再找到


将其用/**/屏蔽, 这样就可以了。
有文章说也可以直接到libs文件夹中将python27.lib 复制一个叫做python27_d.lib文件的放在libs目录下 (尝试不行,不知道原因)


3、有时还会出现无法打开python27.lib,将C:\python27\libs加入bindings文件夹中opencv_python项目的库目录。


4、我编译后对于opencv-stitching 出现如下错误:
1>D:\program files\VS2012\VC\include\xmemory0(605): error C3859: 超过了 PCH 的虚拟内存范围;请使用“-Zm110”或更大的命令行选项重新编译
 1>D:\program files\VS2012\VC\include\xmemory0(605): fatal error C1076: 编译器限制 : 达到内部堆限制;使用 /Zm 指定更高的限制

解决:选择modules文件夹中opencv-stitching项目属性-》配置属性-》C/C++-》命令行 
添加 /Zmnumber,如/Zm1000
其中number是自己想要指定的比例系数;  
  可以指定的值是:10,100,200,1000,2000,对应的memory alloction是5.0M,50MB,100MB,500MB,1000MB; 
建议编译前设置好,直接设置为/Zm2000 ,以免浪费时间。

nonfree和superres项目也可能会出现该问题,可设置后对ALL_BUILD项目再次生成项目。


5、有文章说要修改opencv-gpu的运行库,改为/MT和/MTD,我的情况是修改后debug版本没问题,release版本出错
后来重新生成解决方法不再修改,没有出错。

6、生成解决方案,大概有3万多警告,不必理会。完成后对 CMakeTargets文件夹下INSTALL项目生成。


对于解决方法分别以debug和release下分别进行进行上述步骤,得到lib和dll文件。


三、整理


我们可以将编译结果打包以备以后使用,即得与OpenCV官网目录结构相仿的OpenCV函数库;
观察文件名我们可以发现,无论可执行文件还是库文件有些文件最后有个字母“d”,而有些文件则没有,这是为了辨别调试模式与发行模式生成的文件,不能调试的朋友要特别注意这一点。


参考:http://answers.opencv.org/question/5090/why-opencv-building-is-so-slow-with-cuda/
http://mmcheng.net/%E5%9C%A8%E4%BD%BF%E7%94%A8cuda%E5%92%8Cqt%E9%80%89%E9%A1%B9%E4%B8%8B%E7%BC%96%E8%AF%91opencv/
http://blog.csdn.net/quanquanyu/article/details/8917765
http://blog.csdn.net/quanquanyu/article/details/8917765
http://blog.csdn.net/shuxiao9058/article/details/7526795


相关文章推荐

PyQt4设计UI界面并添加简单功能【python+pyqt4+opencv】

学习python的过程中,了解到PyQt,加上先前用过OpenCV,自然就有了用PyQt设计UI界面,调用OpenCV函数实现功能的想法。 步骤: 1.  Qt designer 快速实现UI界面...

用PyQt5+Caffe+Opencv搭建一个人脸识别登录界面

Caffe人脸识别 Opencv人脸检测 Pyqt

牛顿迭代法求方程解

牛顿迭代法(Newton's method)又称为牛顿-拉夫逊方法(Newton-Raphson method),它是牛顿在17世纪提出的一种在实数域和复数域上近似求解方程的方法。多数方程不存在求根公...

PyQt+OpenCV 录制保存、播放视频

 准备这一两个月看看以前的书,另外学习下视频方面的东西(CV方面)。 之前学过几天QT/PyQt,于是用PyQt结合OpenCV,做了一个小程序。具有播放并保存摄像头捕获组成的视频,以及播放本...

【Python开发】PyQt5应用与实践

一个典型的GUI应用程序可以抽象为:主界面(菜单栏、工具栏、状态栏、内容区域),二级界面(模态、非模态),信息提示(Tooltip),程序图标等组成。本篇根据作者使用PyQt5编写的一个工具,介绍如何...

Win7下qt5.3.1+opencv2.4.9编译环境的搭建

 到官网下载qt-opensource-windows-x86-mingw482_opengl-5.3.1.exe文件,执行该文件,选择默认安装即可实现QT的安装(安装在C盘的根目录下),该...
  • zhaocj
  • zhaocj
  • 2014年08月30日 14:29
  • 23042

利用OpenCV + PyQt4操作摄像头的demo

利用OpenCV + PyQt4操作摄像头的demo

VS2010+QT5.1+opencv2.4.5图像界面第一个程序

VS2010+QT5.1+opencv2.4.5图像界面第一个程序 2013年10月08日 ⁄ 综合 ⁄ 共 2600字 ⁄ 字号 小 中 大 ⁄ 评论关闭 ...

VS2010 Cmake OpenCVC2.4.8

VS2010 Cmake OpenCVC2.4.8
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Cuda 5.5 + Qt5 + opencv 2.4.8 使用cmake+vs2012编译GPU加速的opencv
举报原因:
原因补充:

(最多只允许输入30个字)