OpenCV与CUDA,非常明确的错误信息,但无法弄清楚为什么?

时间:2013-11-26 06:27:40

标签: c++ opencv cuda gpu

我将开始展示我试图测试的代码

#include<opencv2/opencv.hpp>
#include<opencv2/gpu/gpu.hpp>
#include<stdio.h>

using namespace cv;
using namespace std;
using namespace gpu;

int main(int argc,char* argv[]){
    if( argc != 2){
        cout <<" Usage: blur_blur_blur.exe Image_File_To_Go" << endl;
        return -1;
    }
    GpuMat img_gpu,dest_gpu;
    Mat img,dest; 
    img = imread(argv[1], CV_LOAD_IMAGE_GRAYSCALE);
    img_gpu.upload(img);
    cv::gpu::Canny(img_gpu,dest_gpu,50,70); 
    dest_gpu.download(dest);
    imshow("picture",img);
    imshow("canny",dest);
    waitKey(0);
    return 0;
}

正如您所看到的,使用CUDA练习和测试OpenCV只是简单易用的代码。问题是,我没能运行它。更具体地说,它构建但是当我尝试运行它时会弹出错误消息,它说,

  

OpenCV错误:未知函数中的Gpu API调用(内存不足),文件...... \ sources \ modules \ core \ src \ gpumat.cpp,第1415行

我试图处理的图像是1kb,54x33的图像。它实际上比我见过的任何其他缩略图都要小。

我不知道在哪里研究。有什么帮助吗?

PS。我使用OpenCV 2.4.7和CUDA ToolKit 4.2     也许我的CUDA太旧了,不能使用最新的OpenCV?

3 个答案:

答案 0 :(得分:1)

使用32位调试版本,代码在没有任何修改的情况下正常工作。

系统:

Windows 7 64位,Visual Studio 2012,CUDA 5.5,OpenCV 2.4.7,使用GPU支持(Fermi目标)编译,在GTX 570上运行。

输入和输出示例(分辨率640x480):

enter image description here enter image description here

答案 1 :(得分:0)

内存不足意味着您没有足够的内存来分配数据。解决方案是使用较小的图像运行算法或使用其他GPU。

也可能是您尝试调试而不是发布。确保您没有使用CUDA调试标志-g,-G, - debug构建OpenCV。

答案 2 :(得分:0)

我不确定,您可能需要在致电Canny之前指定dst-buffer

尝试:

dest_gpu = GpuMat(img_gpu.size(), img_gpu.type());

顺便说一句,你应该更具体。哪个电话会引起错误?

干杯