我已在此相册中上传了多个屏幕截图:http://imgur.com/a/w4jHc
我正在尝试在Visual Studio 2008中启动并运行OpenCV中的GPU。我正在运行一个OpenCV GPU示例代码bgfg_segm.cpp。但是,当我编译(没有编译错误)时,它会抛出“OpenCV错误:没有GPU支持”。
我可以在C:\ ProgramData \ NVIDIA Corporation \ NVIDIA GPU Computing SDK 4.2 \ C \ bin \ win32 \ Release中运行.exe文件,没有任何错误,所以看起来CUDA正在工作。
我真的希望你可以提供帮助,因为我觉得我必须在这里遗漏一些明显的东西。任何想法或建议都非常感谢。
2012年11月9日编辑:
我最终遵循了sgar91的指示,现在看来事情正在发挥作用!
一个旁注:当您输入Environment Variables
时,请查看CUDA的路径。我的一个人在\
bin
之前有一个反斜杠(C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v4.2\\bin;
)太多了#ifdef _DEBUG
#pragma comment(lib,"opencv_gpu243d")
#pragma comment(lib,"opencv_core243d")
#pragma comment(lib,"opencv_highgui243d")
#else
#pragma comment(lib,"opencv_core243")
#pragma comment(lib,"opencv_highgui243")
#pragma comment(lib,"opencv_gpu243")
#endif
#include <iostream>
#include "opencv2/opencv.hpp"
#include "opencv2/gpu/gpu.hpp"
int main (int argc, char* argv[])
{
try
{
cv::Mat src_host = cv::imread("file.png", CV_LOAD_IMAGE_GRAYSCALE);
cv::gpu::GpuMat dst, src;
src.upload(src_host);
cv::gpu::threshold(src, dst, 128.0, 255.0, CV_THRESH_BINARY);
cv::Mat result_host(dst);
//cv::Mat result_host = dst; //old line commented out
cv::imshow("Result", result_host); //new line added by me
cv::waitKey();
}
catch(const cv::Exception& ex)
{
std::cout << "Error: " << ex.what() << std::endl;
}
return 0;
}
。有三个对CUDA及其SDK的引用,请查看它们。也许这只是一次性的侥幸。我不确定这是否重要。
还有一个旁注:我安装了Visual Studio 2010 Express,并注意到sgar91的说明适用于Visual Studio 2010(又名“vc10”)。它不适用于Visual Studio 2008(又名“vc9”)或Visual Studio 2012(又名“vc11”),因为没有预先构建的lib文件,其中包含OpenCV 2.4.3 for vc9和vc11(仅限vc10)。此外,请注意,如果您使用的是64位Windows,则应按照其指南更改所有X86路径(32位)到X64(64位),而在Visual Studio中,您需要从Win32更改解决方案平台(调试或发布旁边的顶部,中间的下拉菜单)到x64。
还有一个旁注: OpenCV 2.4.3支持CUDA 4.2(或者说libs已经用CUDA 4.2编译)。如果您安装CUDA 5.0,它将无法正常工作。它会抛出一条错误消息。想不起哪个。如果您绝对需要CUDA 5.0,则必须等待OpenCV将其包含在将来的版本中,或者通过CMake编译自己的库。
我运行下面的代码(它来自here,但是我必须纠正其中的一行以使其编译)并且它编译并显示图像,所以我希望这意味着事情正在发挥作用?
{{1}}
我无法获得C:\ opencv \ samples \ gpu中的任何代码。它编译,但然后抛出一个错误。但是搞砸了,我会以某种方式解决这个问题:)
答案 0 :(得分:10)
您正在使用那些在没有GPU支持的情况下编译的OpenCV二进制文件。
C:\opencv\build\x86\...
没有GPU支持。
您必须使用build\gpu
文件夹中的二进制文件和lib文件。
C:\opencv\build\gpu\x86\...
支持GPU。
<强>更新强>
步骤:
在Visual Studio 2010中,转到项目属性。在VC ++目录中,您将看到以下页面:
在包含目录文本框中添加OpenCV include
文件夹的路径。确保多个路径以分号分隔,并且任何路径中都没有空格。
同样为库目录文本框中的GPU和非GPU版本添加OpenCV lib
文件夹的路径。 (别忘了用分号)
重要事项:在框中写入路径时,首先写入GPU路径,然后写入非GPU路径。
下一步是添加OpenCV的bin
文件夹的路径。但不是在visual studio中,而是在Path
环境变量中,如下所示:
My Computer
Environment Variables
部分Path
C:\OpenCV\build\gpu\x86\vc10\bin
和 C:\OpenCV\build\x86\vc10\bin
附加到路径。不要忘记用分号分隔不同的值。也---&GT; GPU首先。重新启动Visual Studio。链接器和#include
指令现在将识别OpenCV库。
由于我们还添加了GPU库的路径,因此OpenCV中将提供完整的GPU支持。
要使用OpenCV的GPU功能,您只需执行以下操作:
#include opencv2/gpu/gpu.hpp
opencv_gpu243d.lib
部分中的“附加依赖项”字段指定调试配置的opencv_gpu243.lib
或发布配置的Linker->Input
。其他一些信息:
在Visual Studio中,有一种简单的方法可以链接库,而不是在项目属性中指定它们。
只需在代码的最开头写下这些行:
#ifdef _DEBUG
#pragma comment(lib,"opencv_core243d")
#pragma comment(lib,"opencv_highgui243d")
#else
#pragma comment(lib,"opencv_core243")
#pragma comment(lib,"opencv_highgui243")
#endif