Visual studio 2008 OpenCV 2.4.3rc和CUDA 4.2:“;OpenCV错误:不支持GPU“;

Visual studio 2008 OpenCV 2.4.3rc和CUDA 4.2:“;OpenCV错误:不支持GPU“;,visual-studio-2008,opencv,cuda,gpu,Visual Studio 2008,Opencv,Cuda,Gpu,我在这张相册中上传了几个截图: 我正试图在VisualStudio2008的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工具包4.2,CUDA SDK 我可以运行C

我在这张相册中上传了几个截图:

我正试图在VisualStudio2008的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工具包4.2,CUDA SDK
我可以运行C:\ProgramData\NVIDIA Corporation\NVIDIA GPU Computing SDK 4.2\C\bin\win32\Release中的.exe文件,没有任何错误,因此CUDA似乎正在工作

我真的希望你能帮我,因为我觉得我肯定错过了一些明显的东西。非常感谢您的任何想法或建议

编辑2012年11月9日:

我最终按照sgar91的指示行事,现在一切似乎都在运转

单边注意:当您输入
环境变量时
检查CUDA的路径。我的一个人在
bin
之前有一个反斜杠(
\
)太多,就像这样
C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v4.2\\bin。CUDA及其SDK有三个参考,请查看它们。也许这只是一时的侥幸。我不确定这是否重要

另一个旁注:我安装了Visual Studio 2010 Express,请注意sgar91的说明是针对Visual Studio 2010(也称为“vc10”)的。它在Visual Studio 2008(又名“vc9”)或Visual Studio 2012(又名“vc11”)中不起作用,因为对于vc9和vc11(仅vc10),没有使用OpenCV 2.4.3预构建的库文件。另外,请注意,如果您使用的是64位Windows,那么在遵循他的指南时,您应该将所有X86路径(32位)更改为X64(64位),并且在Visual Studio中,您需要将解决方案平台从Win32(位于“调试”或“发布”旁边顶部、中部的下拉菜单)更改为X64

还有一个旁注:OpenCV 2.4.3支持CUDA 4.2(或者说LIB是用CUDA 4.2编译的)。如果安装CUDA 5.0,它将无法工作。它抛出一条错误消息。记不起是哪一个。如果您绝对需要CUDA 5.0,您必须等待OpenCV将其包含在未来版本中,或者通过CMake编译您自己的LIB

我运行了下面的代码(它来自,但我必须更正其中的一行以使其编译),它编译并显示了图像,所以我希望这意味着一切正常

#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;

    }
\ifdef\u调试
#pragma注释(lib,“opencv_gpu243d”)
#pragma注释(lib,“opencv_core243d”)
#pragma注释(lib,“opencv_highgui243d”)
#否则
#pragma注释(lib,“opencv_core243”)
#pragma注释(lib,“opencv_highgui243”)
#pragma注释(lib,“opencv_gpu243”)
#恩迪夫
#包括
#包括“opencv2/opencv.hpp”
#包括“opencv2/gpu/gpu.hpp”
int main(int argc,char*argv[])
{
尝试
{
cv::Mat src_host=cv::imread(“file.png”,cv\u LOAD\u IMAGE\u灰度);
cv::gpu::GpuMat dst,src;
src.upload(src_主机);
cv::gpu::threshold(src、dst、128.0、255.0、cv_THRESH_二进制);
cv::Mat结果_主机(dst);
//cv::Mat result_host=dst;//已注释掉旧行
cv::imshow(“Result”,Result_host);//我添加的新行
cv::waitKey();
}
捕获(常量cv::异常和异常)
{

std::cout您使用的是那些在不支持GPU的情况下编译的OpenCV二进制文件

C:\opencv\build\x86\…
不支持GPU

您必须使用
build\gpu
文件夹中的二进制文件和lib文件

C:\opencv\build\gpu\x86\…
支持gpu

更新:

程序:

在Visual Studio 2010中,转到项目属性。在VC++目录中,您将看到以下页面:

将OpenCV
include
文件夹的路径添加到include Directories文本框中。确保用分号分隔多个路径,并且任何路径中都没有空格

同样,在库目录文本框中为GPU和非GPU版本添加OpenCV
lib
文件夹的路径。(不要忘记分号)

重要提示:在框中写入路径时,首先写入GPU路径,然后写入非GPU路径

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

  • 右键单击我的电脑
  • 转到属性
  • 转到
    环境变量
    部分
  • 编辑系统变量路径
  • C:\OpenCV\build\gpu\x86\vc10\bin
    C:\OpenCV\build\x86\vc10\bin
    附加到路径中。别忘了用分号分隔不同的值。另外-->gpu优先
  • 保存并退出
  • 重新启动Visual Studio。链接器和
    #include
    指令现在将识别OpenCV库。 由于我们还添加了GPU库的路径,所以完整的GPU支持将在OpenCV中提供

    要使用OpenCV的GPU功能,只需执行以下操作:

    • #包括opencv2/gpu/gpu.hpp
    • 为调试配置指定
      opencv\u gpu243d.lib
      ,或在项目属性的
      Linker->Input
      部分的附加依赖项字段中为发布配置指定
      opencv\u gpu243.lib
    一些附加信息:

    在VisualStudio中,有一种简单的方法可以链接库,而不是在项目属性中指定它们

    #ifdef _DEBUG
    #pragma comment(lib,"opencv_core243d")
    #pragma comment(lib,"opencv_highgui243d")
    #else
    #pragma comment(lib,"opencv_core243")
    #pragma comment(lib,"opencv_highgui243")
    #endif