Я начну с отображения кода, который я пытался проверить
#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;
}
Как вы можете видеть, это простой и простой код для практики и тестирования OpenCV с CUDA. Проблема в том, что я не смог запустить ее. Чтобы быть более конкретным, он строит, но когда я пытался запустить сообщение об ошибке, он говорит:
Ошибка OpenCV: вызов API Gpu (из памяти) в неизвестной функции, файл...... \sources\modules\core\src\gpumat.cpp, строка 1415
образ, который я пытался обработать, был 1kb, resoultion 54x33. Это на самом деле меньше, чем любая другая миниатюра, которую я когда-либо видел.
Я понятия не имею, где искать. любая помощь?
PS. Я использую OpenCV 2.4.7 с CUDA ToolKit 4.2, возможно, мой CUDA слишком стар, до даты OpenCV?
Код работал отлично для меня без каких-либо изменений, используя 32-битную сборку отладки.
система:
Windows 7 64-бит, Visual Studio 2012, CUDA 5.5, OpenCV 2.4.7, скомпилированные с поддержкой GPU (цель Fermi), работающие на GTX 570.
Пример ввода и вывода (разрешение 640x480):
Я не уверен, возможно, вам нужно указать свой dst-buffer
прежде чем вы вызовете Canny.
Пытаться:
dest_gpu = GpuMat(img_gpu.size(), img_gpu.type());
Кстати, вы должны быть более конкретными. Какой вызов вызывает ошибку?
ура
Недостаточно памяти означает, что у вас недостаточно памяти для распределения данных. Решение - запустить алгоритм с меньшим изображением или использовать другой графический процессор.
Возможно также, что вы пытаетесь отлаживать, а не выпускать. Убедитесь, что вы не создаете OpenCV с флагами CUDA debug -g, -g, --debug.