OpenCV 2.4.3rc и CUDA 4.2: «Ошибка OpenCV: поддержка GPU не поддерживается»

Я загрузил несколько скриншотов в этом альбоме: http://imgur.com/a/w4jHc

Я пытаюсь запустить GPU в OpenCV в Visual Studio 2008. Я запускаю один из примеров кода OpenCV, bgfg_segm.cpp. Однако, когда я компилирую (без ошибок компиляции), он генерирует «ошибку OpenCV: нет поддержки GPU».

  • Windows 7, 32-разрядная
  • Visual Studio 2008
  • nVidia Quadro 1000M с версией драйвера 301.27
  • OpenCV 2.4.3rc (используя предварительно скомпилированные библиотеки, которые пришли с ним)
  • CUDA Toolkit 4.2, CUDA SDK.

Я могу запустить файлы .exe в C: \ ProgramData \ NVIDIA Corporation \ NVIDIA GPU Computing SDK 4.2 \ C \ bin \ win32 \ Release без каких-либо ошибок, поэтому кажется, что CUDA работает.

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

EDIT 9 ноября 2012 года:

Я закончил следовать инструкциям sgar91, и кажется, что все работает сейчас!

Один побочный элемент: когда вы вводите Environment Variables проверьте пути для 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 (aka «vc9») или Visual Studio 2012 (aka «vc11»), потому что нет готовых файлов lib с OpenCV 2.4.3 для vc9 и vc11 (только vc10). Кроме того, имейте в виду, что если вы находитесь на 64-битной Windows, вы должны изменить все пути X86 (32-разрядные) на X64 (64-разрядные) вместо этого, когда будете следовать его руководству, а в Visual Studio вам необходимо изменить платформу решений от Win32 (выпадающее меню вверху, посередине рядом с Debug или Release) до x64.

Еще одно побочное решение: OpenCV 2.4.3 поддерживает CUDA 4.2 (или, скорее, библиотеки были скомпилированы с CUDA 4.2). Если вы установите CUDA 5.0, это не сработает. Он выдает сообщение об ошибке. Не могу вспомнить, какой. Если вам абсолютно необходим CUDA 5.0, вам нужно либо дождаться, пока OpenCV включит его в будущие версии, либо скомпилирует ваши собственные библиотеки через CMake.

Я запустил код ниже (это отсюда , но мне пришлось исправить одну строку в нем, чтобы скомпилировать его), и он скомпилировал и показал изображение, поэтому я ожидал бы, что это означает, что все работает?

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

Я не могу получить какой-либо код в C: \ opencv \ samples \ gpu для работы. Он компилируется, но затем выдает ошибку. Но прикручивай, я как-нибудь это соображу 🙂

Вы используете эти двоичные файлы OpenCV, которые скомпилированы без поддержки графического процессора.

C:\opencv\build\x86\... без поддержки графического процессора.

Вы должны использовать файлы binaries и lib, которые присутствуют в папке build\gpu .

C:\opencv\build\gpu\x86\... с поддержкой GPU.

ОБНОВИТЬ:

Процедура:

В Visual Studio 2010 перейдите к свойствам проекта. В каталогах VC ++ вы увидите следующую страницу:

Добавьте путь к каталогу OpenCV include в текстовое поле Include Directories . Убедитесь, что несколько путей разделены точкой с запятой, и в любом из путей нет места.

Аналогичным образом добавьте путь к папкам OpenCV lib для версий GPU и Non-GPU в текстовом поле Библиотечные каталоги. (Не забудьте точку с запятой)

Важно: при написании путей в поле сначала запишите путь GPU, а затем – путь без GPU.

введите описание изображения здесь

Следующий шаг – добавление пути к папке bin в OpenCV. Но не в визуальной студии, а в переменной окружения Path как показано ниже:

введите описание изображения здесь

  • Щелкните правой кнопкой мыши My Computer
  • Перейти к свойствам
  • Перейдите в раздел Environment Variables
  • Редактирование пути системной переменной
  • Добавьте путь к C:\OpenCV\build\gpu\x86\vc10\bin и C:\OpenCV\build\x86\vc10\bin в путь. Не забудьте разделить разные значения с точкой с запятой. Также —> GPU приходит первым .
  • Сохранить и выйти.

Перезапустите Visual Studio. Теперь ссылки и директива #include теперь распознают библиотеки OpenCV. Поскольку мы добавили путь к библиотекам GPU, так что полная поддержка GPU будет доступна в OpenCV.

Чтобы использовать функциональность GPU OpenCV, вам просто нужно сделать следующее:

  • #include opencv2/gpu/gpu.hpp
  • Укажите opencv_gpu243d.lib для конфигурации отладки или opencv_gpu243.lib для конфигурации выпуска в поле «Дополнительные зависимости» в разделе «Свойства Linker->Input » свойств проекта.

Дополнительная информация:

В Visual Studio существует простой способ связать библиотеки, а не указывать их в свойствах проекта.

Просто напишите эти строки в самом начале вашего кода:

 #ifdef _DEBUG #pragma comment(lib,"opencv_core243d") #pragma comment(lib,"opencv_highgui243d") #else #pragma comment(lib,"opencv_core243") #pragma comment(lib,"opencv_highgui243") #endif 
  • Событие Post Build Visual Studio - копирование в относительное расположение каталога
  • Устранение методов расширения / неопределенность LINQ
  • в visual studio 2010 или 2008
  • C # - выборочное подавление пользовательских устаревших предупреждений
  • Имя «ConfigurationManager» не существует в текущем контексте
  • Есть ли горячая клавиша в Visual Studio, чтобы открыть раскрывающийся список участников?
  • Не удается найти пространство имен 'System.Data.SqlServerCe'
  • Служба Windows не появляется в списке служб после установки
  • Определение типа проекта в визуальной студии
  • Могу ли я использовать бета-версию .NET 4.0 в Visual Studio 2008?
  • Как я могу обнаружить ненужные файлы #include в большом проекте на C ++?
  • Давайте будем гением компьютера.