OpenCV с CUDA, очень четкое сообщение об ошибке, но не может понять, почему?

0

Я начну с отображения кода, который я пытался проверить

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

Теги:
opencv
cuda
gpu

3 ответа

1
Лучший ответ

Код работал отлично для меня без каких-либо изменений, используя 32-битную сборку отладки.

система:

Windows 7 64-бит, Visual Studio 2012, CUDA 5.5, OpenCV 2.4.7, скомпилированные с поддержкой GPU (цель Fermi), работающие на GTX 570.

Пример ввода и вывода (разрешение 640x480):

Изображение 174551Изображение 174551

  • 0
    Система, которую я сейчас использую, оснащена 9300GS, в соответствии с GPU-Z на ней явно установлено ядро CUDA. Сейчас я пытаюсь собрать библиотеку с более новой версией CUDA Tool Kit и SDK и, надеюсь, она будет другой.
  • 0
    Ваш графический процессор очень старый и вряд ли будет поддерживаться OpenCV. NVIDIA определяет GPU по возможностям вычислений (CC). 9300GS - это устройство CC 1.1. Текущие устройства 3,0 и 3,5. В конфигурации CMake для OpenCV могут быть выбраны только Fermi (CC 2.0 и CC 2.1) и Kepler (CC 3.0 и CC 3.5), поэтому я не думаю, что OpenCV поддерживает что-то более старое, чем CC 2.0.
Показать ещё 1 комментарий
0

Я не уверен, возможно, вам нужно указать свой dst-buffer прежде чем вы вызовете Canny.

Пытаться:

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

Кстати, вы должны быть более конкретными. Какой вызов вызывает ошибку?

ура

0

Недостаточно памяти означает, что у вас недостаточно памяти для распределения данных. Решение - запустить алгоритм с меньшим изображением или использовать другой графический процессор.

Возможно также, что вы пытаетесь отлаживать, а не выпускать. Убедитесь, что вы не создаете OpenCV с флагами CUDA debug -g, -g, --debug.

  • 0
    Ну, как я писал в посте, изображение было 1 КБ, разрешение 54х33. Я не думаю, что размер изображения имеет значение здесь. и насчет отладки, я на самом деле пытаюсь собрать релиз. (Между прочим, я не установил ни одного флага ...) Я просто удалил весь код после 'img_gpu.upload (img);' часть, и это все еще дает мне ту же ошибку.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню