Win7下,VS2010 + CUDA7.5 + GPU 重新编译OpenCV2.4.9(一)

来源:互联网 发布:华为软件开发面试经验 编辑:程序博客网 时间:2024/05/23 19:38

Cmake安装步骤可参考 


CUDA_环境搭建:Win7+VS2010+CUDA7.5



Win7下,VS2010 + CUDA7.5 重新编译OpenCV2.4.9,配置GPU环境,编译错误与解决方案


步骤一

1.       打开CMake,在Where is thesource code:中选择

F:/ProgramFiles/opencv249/opencv/sources

文件夹,在Where to buildthe binaries:中选择

F:/ProgramFiles/opencv249/opencv/VS2010_GPU64

文件夹,此文件夹为手动创建;


(注意:opencv2.4.9.exe解压之后,会默认生成两个文件夹build和sources,此时需要将build文件夹复制到sources文件夹下之后,再开始cmake configure;而opencv2.4.6.exe解压之后只生成一个文件夹,直接定位到这个文件夹即可)


2.       点击configure,选择 Visual Studio 10 2010 Win64

取消"BUILD_DOCS" 和"BUILD_SAMPLES".和"CUDA_ATTACH_VS_BUILD_RULE_TO_CUDA_FILE"

"CUDA_GENERATION" = Kepler. 

选择""WITH_CUBLAS""WITH_CUDA" “WITH_CUFFT”WITH_TBB"

----------------------------------------------------------------------------

后来由于自己的电脑版本配置的问题,我将 "CUDA_GENERATION" = Fermi,具体原因可参见

Win7下,VS2010 + CUDA7.5 + GPU 重新编译OpenCV2.4.9(二)

中的问题分析

----------------------------------------------------------------


3.       点击confugure,若没有红色区域出现,则是完全正确的

4.         点击Generate,出现Genetating done,则表示生成成功,这是可以在F:/ProgramFiles/opencv246/opencv/VS2010_GPU64目录下看到OpenCV.sln项目。

步骤二

1)如果 OpenCV,tbb,Python 中的某个安装在C:\Program Files,那么你需要用管理员权限运行 vs2013 才行

2)我建议先编译“解决方案资源管理器”中modules下的 *opencv_core* 和 ‘ opencv_gpu* (右键点击,点 *BUILD*)。如果这两个没错,接下来应该都可以编译。

3)在Debug,右键点击 *ALL_BUILD*,再点 *BUILD*,进行生成。生成成功**个,失败0个,表示完全成功。

4) -*BUILD* 之后再编译一下CMakeTargets下的 INSTALL,来把编译好的文件放在一起到 *<Output Folder>\install

5)在切换到 Release,重复生成 *ALL_BUILD* 和 *INSTALL*

6) *Debug*有0个 error, *Release* 有0个 error,成功啦

7) 编译时间很长,要一两个小时,耐心等待哦。

 

 

三、报错以及解决方案

1. 重新生成OpenCV.sln报错:报错:

23>LINK : fatal error LNK1104: 无法打开文件“..\..\lib\Debug\opencv_core249d.lib”

21> gemm.cpp

21> gftt.cpp

23>

23>生成失败。

解决方案:需要先成功编译opencv_core

 

 

2. 25>  CMake Error atcuda_compile_generated_bf_knnmatch.cu.obj.cmake:206 (message):

>C:\ProgramFiles (x86)\MSBuild\Microsoft.Cpp\v4.0\Microsoft.CppCommon.targets(151,5):error MSB6006: “cmd.exe”已退出,代码为 1。

解决方案:将CIDA_GENERATION设为Kepler

 

 

 

3. 编译opencv_gpu时报错

..\..\..\opencv\modules\core\src\gpumat.cpp(1369):error C2440: “specialization”: 无法从“NppStatus

(__cdecl *)(const Npp8s [],Npp8s*,int,NppiSize)”转换为“NppStatus (__cdecl*)(Npp8s [],Npp8s*,int,NppiSize)”

19>F:\ProgramFiles\opencv246\opencv\VS2010_GPU\bin\Debug\opencv_gpu249d.dll: fatal error LNK1120: 273 个无法解析的外部命令

解决方案:这是因为找不到对应的nppi.Lib,属性管理器中,“配置管理器”配置的是x86,而CUDA win32的库目录中只有以下几个库,没有nppi.lib库文件,将”配置管理器”设置为x64即可。

其中Win32的库文件为:


其中x64库有以下:

 

 

4. 跳出是否重新加载和生成类似的对话框时,点击“cancel”

 

 

5. 跳出以下类似界面的时候,点击“是”


6.         Debug下,生成*ALL_BUILD* 和*INSTALL*完全正确,在切换到 Release,重复 生成 ALL_BUILD的时候报错:*ALL_BUILD*\ProgramFiles\opencv246\opencv\VS2010_GPU64\ZERO_CHECK.vcxproj: error  : 无法读取项目文件“ZERO_CHECK.vcxproj”。

解决方案:不知道哪一步可能点错了,出现了这个问题,导致CMakeTargets下的ZERO_CHECK不能用,只好重新CMake生成一遍,然后重新生成Release下的opencv_core和opencv_gpu,*ALL_BUILD*和 *INSTALL*


7.         测试代码,编译报错: 1>opencv_core249d.lib(opencv_core249d.dll) :fatal error LNK1112: 模块计算机类型“X86”与目标计算机类型“x64”冲突

解决方案:win7下的64位系统,在运行程序的时候,需要的DLL必须是64位系统编译的,VS2008也必须在安装的时候,选择了64位编译的支持。如果安装的时候,已经选择了,那么出现该问题的解决办法,安装网上常规的思路即可。既:

1)右键项目名,点击属性,弹出项目属性页,找到链接器----高级,修改右侧的目标计算机,选择有X64的那个选项。

        
2)右键项目名,选择清理解决方案,清理完之后选择X64平台编译器,然后重新生成解决方案,便可以调试成功。

3)重新配置包含目录和库目录以及附加依赖项

 

 

 

 

8.         测试代码,编译成功,运行的时候报错:应用程序无法正常启动(0xc000007b),请单击“确定”关闭应用程序。

解决方案:

解决方法步骤:

1)       安装DirectX修复工具,一键检测及修复。 这里主要是修复系统中缺少的动态链接库(.dll)文件

2)       通过1之后如果还是出错,则可能是系统缺少vs的相关运行库和再开发包。可以安装一个DirectX增强版,这个增强版可以进一步修复系统中的运行库问题

3)       1,2之后已经确保了系统是没有问题的,如果仍然出错(博主就是属于第三种情况),则可能是vs10的运行环境出了问题。在配置VS10的运行环境时,一定要注意一致性!!!例如,我的电脑是64位操作系统,我在配置时用了opencvX64包含目录和库目录,而VS中则是WIN32的运行平台,最终导致系统配置混乱,出现无法正常启动的错误。

解决方法:VS中使用默认的Win32平台,在配置时全部使用针对32位系统的库目录和包含目录,系统环境变量中也要设置OPENCV32位的C:\OpenCV2.3.1\build\x86\vc10\bin;运行环境和系统配置全都按照32位操作系统来,解决问题。

4)       在环境变量中加入F:\ProgramFiles\opencv246\opencv\VS2010_GPU64\install\x64\vc10\bin

此方法可以解决这个问题.


测试

 

1、  VS2010新建一个CUDA项目,参见 

CUDA_HelloWorld

2、

vs2010配置OpenCV环境:选择View--> Properties Manager-->分别选中DebugRelease上的Microsoft.Cpp.x64.user,点击右键-->-》属性—》配置属性-》VC++目录-》包含目录,添加C:\ProgramFiles\NVIDIA GPU Computing Toolkit\CUDA\v7.5\include

C:\ProgramData\NVIDIA Corporation\CUDASamples\v7.5\common\inc

F:\ProgramFiles\opencv246\opencv\VS2010_GPU64\install\include

F:\ProgramFiles\opencv246\opencv\VS2010_GPU64\install\include\opencv

F:\ProgramFiles\opencv246\opencv\VS2010_GPU64\install\include\opencv2

库目录,添加

C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v7.5\lib\Win32

F:\ProgramFiles\opencv246\opencv\VS2010_GPU64\install\x64\vc10\lib

  3、选中工程,

在项目-》属性—》配置属性-》VC++目录-》包含目录,添加

C:\ProgramFiles\NVIDIA GPU Computing Toolkit\CUDA\v7.5\include

C:\ProgramData\NVIDIA Corporation\CUDASamples\v7.5\common\inc

F:\ProgramFiles\opencv246\opencv\VS2010_GPU64\install\include

F:\ProgramFiles\opencv246\opencv\VS2010_GPU64\install\include\opencv

F:\ProgramFiles\opencv246\opencv\VS2010_GPU64\install\include\opencv2

在项目-》属性—》配置属性-》VC++目录-》库目录,添加

 

C:\Program Files\NVIDIA GPU ComputingToolkit\CUDA\v7.5\lib\Win32

F:\ProgramFiles\opencv246\opencv\VS2010_GPU64\install\x64\vc10\lib

 

在项目-》属性—》配置属性-》链接器-》输入-》附加依赖项,添加

opencv_calib3d249d.lib

opencv_contrib249d.lib

opencv_core249d.lib

opencv_features2d249d.lib

opencv_flann249d.lib

opencv_gpu249d.lib

opencv_highgui249d.lib

opencv_imgproc249d.lib

opencv_legacy249d.lib

opencv_ml249d.lib

opencv_objdetect249d.lib

opencv_ts249d.lib

opencv_video249d.lib

cublas.lib

cublas_device.lib

cuda.lib

cudadevrt.lib

cudart.lib

cudart_static.lib

cufft.lib

cufftw.lib

curand.lib

cusolver.lib

cusparse.lib

nppc.lib

nppi.lib

npps.lib

nvblas.lib

nvcuvid.lib

nvrtc.lib

OpenCL.lib

 

3、  将*.cu中加入测试代码:

 

<pre name="code" class="cpp">#include <opencv2/opencv.hpp>#include <opencv2/gpu/gpu.hpp>using namespace cv;using namespace cv::gpu;int main(){int num_devices = cv::gpu::getCudaEnabledDeviceCount();if(num_devices <= 0){std::cerr<<"There is no device. "<<std::endl;return -1;}std::cerr<<"getCudaEnabledDeviceCount NUM :"<<num_devices<<std::endl;cv::Mat srcImage = cv::imread("M:\\work\\Pic\\cityWu.jpg");cv::Mat dstImage;cv::gpu::GpuMat d_srcImage;//upload image to GPUcv::gpu::GpuMat d_dstImage;d_srcImage.upload(srcImage);cv::gpu::GpuMat dst;dst.create(d_srcImage.size(),CV_8UC1);cv::gpu::cvtColor(d_srcImage, d_dstImage, CV_BGR2GRAY);d_dstImage.download(dstImage);cv::imshow("RGB",srcImage);cv::imshow("gray",dstImage);cv::waitKey(0);return 0;}




 

4、运行程序,得到GPU数量不为0,即表示配置成功

参考:

1. http://www.cnblogs.com/yexuannan/p/3642918.html

20140403 opencvGPU安装

2. http://blog.csdn.net/lanbing510/article/details/41211697

编译Opencv的GPU,利用CUDA加速

0 0
原创粉丝点击