您的位置:首页 > 编程语言 > Qt开发

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

2014-03-03 21:08 841 查看
花了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/

/article/10658519.html

/article/10658519.html

/article/1357777.html
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: