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位操作系统,我在配置时用了opencv的X64包含目录和库目录,而VS中则是WIN32的运行平台,最终导致系统配置混乱,出现无法正常启动的错误。
解决方法:VS中使用默认的Win32平台,在配置时全部使用针对32位系统的库目录和包含目录,系统环境变量中也要设置OPENCV的32位的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-->分别选中Debug和Release上的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 GPU
cv::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