OpenCV 2.4.3rc和CUDA 4.2:“OpenCV错误:没有GPU支持”

时间:2012-11-05 08:56:37

标签: visual-studio-2008 opencv cuda gpu

我已在此相册中上传了多个屏幕截图:http://imgur.com/a/w4jHc

我正在尝试在Visual Studio 2008中启动并运行OpenCV中的GPU。我正在运行一个OpenCV GPU示例代码bgfg_segm.cpp。但是,当我编译(没有编译错误)时,它会抛出“OpenCV错误:没有GPU支持”。

  • Windows 7,32位
  • Visual Studio 2008
  • nVidia Quadro 1000M,驱动程序版本301.27
  • OpenCV 2.4.3rc(使用随附的预编译库)
  • CUDA Toolkit 4.2,CUDA SDK。

我可以在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中的任何代码。它编译,但然后抛出一个错误。但是搞砸了,我会以某种方式解决这个问题:)

1 个答案:

答案 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路径。

enter image description here

下一步是添加OpenCV的bin文件夹的路径。但不是在visual studio中,而是在Path环境变量中,如下所示:

enter image description here

  • 右键点击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