Win10编译OpenCV2.4.9+CUDA7.5的方法
2015-11-08 14:46
357 查看
最近开始对视频处理代码做CUDA优化,考虑将OpenCV2.4.9的代码增加GPU版本的实现。经过简单尝试之后发现需要自己重新编译OpenCV。过程中有一些小Trick,在此记录下来。
其中操作系统、VS、CUDA、Cmake的版本不一定非得如表中,确保VS+CUDA是可以正常编译运行CUDA Samples程序即可。OpenCV的版本则一定是2.4.9,其他版本没有测试,虽然编译步骤大致相同,但是可以有一些需要自己解决的小问题。
E:\libraries\opencv\sources\modules\gpu\src\nvidia\core\NCV.cu
添加 一个#include如下:
不添加此#include编译GPU模块时会出现max函数找不到的错误。编译GPU模块耗时2个小时左右,出错得全部重新来,所以建议第一步改这里。
(2)打开Cmake-GUI,设置好源代码目录E:/libraries/opencv/sources和目标目录E:/libraries/opencv/build/cuda。目标目录需要手动创建。
之后点击”Configure”按钮,会要求你选择编译器,我选了VS2013x64,也就是说编译64位的opencv。一会儿之后信息栏就会出现“Configure Done”。然后根据需要可以选择一些模块,其中如果你的CUDA安装好了WITH_CUDA选项默认是勾选上的,默认没有勾选上的话请检查CUDA是否能正常工作。
接下来一个必不可少的步骤是设置CUDA_GENREATION选项,这个选项默认是留空的,需要根据你的显卡架构来设置。可以在网上查询你显卡的架构,我的GTX 870m是Kelper架构的,因此选择Kelper。注意不要选”Auto“,否则编译时会出现“架构不匹配:compute_11”之类的错误。
另外CUDA_ARCH_BIN选项是CUDA执行版本,一般保留一两个最新的就可以。过多的版本可以导致编译GPU模块时非常慢。
然后点击”Generate”,会在目标目录生成一个OpenCV.sln的VS项目。
(3)打开OpenCV.sln,解决方案配置选择“Release”(默认是“DEBUG”),直接编译。大多数模块会在20分钟之内编译完毕。最后是GPU模块,这个模块的编译时间在两个小时左右,编译出的dll文件有128MB左右。如果做了前面所说的修改和选项设置,编译过程应该没有错误。
(4)将编译好的lib和dll文件覆盖OpenCV build目录下VS12 x64对应的文件(覆盖前最好对原文件备份)。然后你的OpenCV可以正常使用GpuMat等GPU数据结构和函数了。
(2)编译GPU模块在我的鲁大师19万分的电脑上耗时2个小时左右,需要耐心。
1.需要准备的软件环境
需要准备的软件环境如下:软件 | 版本 |
---|---|
操作系统 | Windows 10 x64 |
Visual Studio | 2013 |
CUDA | 7.5 |
OpenCV | 2.4.9 |
CMake | 3.0.2 |
2.编译
(1)首先解压OpenCV2.4.9.exe到一个目录,我的是E:\libraries。修改源码文件E:\libraries\opencv\sources\modules\gpu\src\nvidia\core\NCV.cu
添加 一个#include如下:
#include <iostream> #include <string> #include <vector> #include <algorithm> //手动添加 #include "NCV.hpp"
不添加此#include编译GPU模块时会出现max函数找不到的错误。编译GPU模块耗时2个小时左右,出错得全部重新来,所以建议第一步改这里。
(2)打开Cmake-GUI,设置好源代码目录E:/libraries/opencv/sources和目标目录E:/libraries/opencv/build/cuda。目标目录需要手动创建。
之后点击”Configure”按钮,会要求你选择编译器,我选了VS2013x64,也就是说编译64位的opencv。一会儿之后信息栏就会出现“Configure Done”。然后根据需要可以选择一些模块,其中如果你的CUDA安装好了WITH_CUDA选项默认是勾选上的,默认没有勾选上的话请检查CUDA是否能正常工作。
接下来一个必不可少的步骤是设置CUDA_GENREATION选项,这个选项默认是留空的,需要根据你的显卡架构来设置。可以在网上查询你显卡的架构,我的GTX 870m是Kelper架构的,因此选择Kelper。注意不要选”Auto“,否则编译时会出现“架构不匹配:compute_11”之类的错误。
另外CUDA_ARCH_BIN选项是CUDA执行版本,一般保留一两个最新的就可以。过多的版本可以导致编译GPU模块时非常慢。
然后点击”Generate”,会在目标目录生成一个OpenCV.sln的VS项目。
(3)打开OpenCV.sln,解决方案配置选择“Release”(默认是“DEBUG”),直接编译。大多数模块会在20分钟之内编译完毕。最后是GPU模块,这个模块的编译时间在两个小时左右,编译出的dll文件有128MB左右。如果做了前面所说的修改和选项设置,编译过程应该没有错误。
(4)将编译好的lib和dll文件覆盖OpenCV build目录下VS12 x64对应的文件(覆盖前最好对原文件备份)。然后你的OpenCV可以正常使用GpuMat等GPU数据结构和函数了。
3.注意事项
(1)注意2(1)中的源码修改和2(2)中的CUDA_GENERATION选项设置;(2)编译GPU模块在我的鲁大师19万分的电脑上耗时2个小时左右,需要耐心。
相关文章推荐
- Aut2Exe编译au3脚本为可执行文件
- CentOS 6.3下编译安装Ruby 2.0笔记
- 把Lua编译进nginx步骤方法
- Lua中编译执行代码相关的函数详解
- Chrome Visual Studio 2005下的编译过程
- Windows下使用Cygwin编译MySQL客户端
- android的编译和运行过程深入分析
- c#中xml文档注释编译dll引用到其它项目示例
- Lua cjson模块编译笔记及错误解决方法
- SQLSERVER编译与重编译发生场景及重用的利弊介绍
- 浅析使用Turck-mmcache编译来加速、优化PHP代码
- 如何编译libfreetype方法详解
- 深入理解C语言中编译相关的常见错误
- 在VS2008中编译MYSQL5.1.48的方法
- Nginx编译参数大全 configure参数中文详解
- python中使用OpenCV进行人脸检测的例子
- centos下编译安装mysql报错解决方案
- opencv 做人脸识别 opencv 人脸匹配分析
- 使用opencv拉伸图像扩大分辨率示例
- Lua的编译、执行和调试技术介绍