2016-07-30 3 views
0

Я использую следующий код для обнаружения особенностей:Как использовать OpenCL версию SURF?

auto detector = cv::xfeatures2d::SURF::create(); 
std::vector<cv::KeyPoint> keypoints; 

for (const cv::Mat& image : images) { 
    detector->detect(image, keypoints); 
    process(keypoints); 
} 

Теперь я пытаюсь использовать OpenCL версию SURF. Я изменил свой код для работы с cv::UMat. К сожалению, время выполнения не меняется. HAS_OPENCL установлен, cv::ocl::useOpenCL() - это правда. Что может пойти не так?

+0

сделал вы найдете http://docs.opencv.org/2.4/modules/nonfree/doc/feature_detection.html#ocl-surf-ocl и http://code.opencv.org/attachments/1560/surf.ocl.cpp? ? – Micka

+0

@ Мика К сожалению, это относится к OpenCL 2.4, а не к 3.0. 'SURF_OCL' там даже не существует. – Anton3

+1

Вы пытались вызвать 'cv :: ocl :: setUseOpenCL (true);' явно? Но http://answers.opencv.org/question/63452/opencv-30-the-performance-of-umat/ говорит, что может быть много функций, которые были преобразованы в новый api, поэтому, вероятно,/many non-free функции принадлежат им. – Micka

ответ

0

Я знаю, что я немного поздно для этого, но, глядя на surf.cpp, SURF_Impl::detectAndCompute начинается с #ifdef HAVE_OPENCL, так что я думаю, что если вы построили OpenCV с поддержкой OpenCL, OpenCL по умолчанию используется

+0

Хорошо, но это означает, что реализация OpenCL была в 10 раз медленнее, чем CUDA на моем компьютере. Кажется странным для меня. – Anton3

+0

@ Anton3 точно так же, как информация: какая реализация CUDA SURF вы используете? Сколько времени вам нужно, чтобы описать только ** одно изображение с использованием GPU? Если возможно, укажите также размер изображения и используемый графический процессор – justHelloWorld

+0

Я использую SURF_CUDA из OpenCV. Это занимает около 0,2 секунды с SURF_CUDA и около 2 секунд с нормальным классом SURF. Размер изображения - 1920x1080, GPU - GTX 970. Редактирование: ну, это взяло, потому что я проверил полгода назад. – Anton3

Смежные вопросы