现在的位置: 首页 > 综合 > 正文

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

2014年09月05日 ⁄ 综合 ⁄ 共 2379字 ⁄ 字号 评论关闭

花了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”,而有些文件则没有,这是为了辨别调试模式与发行模式生成的文件,不能调试的朋友要特别注意这一点。


抱歉!评论已关闭.