我将开始展示我试图测试的代码
#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?
答案 0 :(得分:1)
使用32位调试版本,代码在没有任何修改的情况下正常工作。
系统:
Windows 7 64位,Visual Studio 2012,CUDA 5.5,OpenCV 2.4.7,使用GPU支持(Fermi目标)编译,在GTX 570上运行。
输入和输出示例(分辨率640x480):
答案 1 :(得分:0)
内存不足意味着您没有足够的内存来分配数据。解决方案是使用较小的图像运行算法或使用其他GPU。
也可能是您尝试调试而不是发布。确保您没有使用CUDA调试标志-g,-G, - debug构建OpenCV。
答案 2 :(得分:0)
我不确定,您可能需要在致电Canny之前指定dst-buffer
。
尝试:
dest_gpu = GpuMat(img_gpu.size(), img_gpu.type());
顺便说一句,你应该更具体。哪个电话会引起错误?
干杯