2016-07-30 31 views
0

Ich verwende den folgenden Code für Feature-Erkennung:Wie wird die OpenCL-Version von SURF verwendet?

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

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

Jetzt versuche ich OpenCL Version von SURF zu verwenden. Ich habe meinen Code geändert, um mit cv::UMat zu arbeiten. Leider ändert sich die Ausführungszeit nicht. HAS_OPENCL ist gesetzt, cv::ocl::useOpenCL() ist wahr. Was könnte schiefgehen?

+0

tat finden Sie http://docs.opencv.org/2.4/modules/nonfree/doc/feature_detection.html#ocl-surf-ocl und http://code.opencv.org/attachments/1560/surf.ocl.cpp? ? – Micka

+0

@Micka Dies bezieht sich leider auf OpenCL 2.4, nicht 3.0. 'SURF_OCL' existiert dort nicht einmal. – Anton3

+1

Haben Sie versucht, 'cv :: ocl :: setUseOpenCL (true);' explizit aufzurufen? Aber http://answers.opencv.org/question/63452/opencv-30-the-performance-ofumat/ sagt, dass es viele Funktionen geben könnte, die in die neue API konvertiert wurden, also wahrscheinlich die/viele nicht-freie Funktionen gehören ihnen. – Micka

Antwort

0

Ich weiß, dass ich ein bisschen spät für diese bin, aber bei surf.cpp suchen, SURF_Impl::detectAndCompute beginnt mit einem #ifdef HAVE_OPENCL, also denke ich, dass, wenn Sie OpenCV gebaut mit OpenCL aktiviert, OpenCL von

standardmäßig verwendet wird
+0

Okay, aber dann bedeutet es, dass OpenCL-Implementierung auf meinem Computer 10 Mal langsamer war als CUDA. Es kommt mir seltsam vor. – Anton3

+0

@ Anton3 nur als Info: Welche CUDA SURF Implementierung verwendest du? Wie lange dauert es im AVG, um nur ein Bild mit GPU-Ansatz zu beschreiben? Bitte geben Sie wenn möglich auch die Bildgröße und die verwendete GPU – justHelloWorld

+0

an Ich benutze SURF_CUDA von OpenCV. Es dauert etwa 0,2 Sekunden mit SURF_CUDA und etwa 2 Sekunden mit normaler SURF-Klasse. Bildgröße ist 1920x1080, GPU ist GTX 970. Edit: Nun, es hat gedauert, weil ich die Tests vor einem halben Jahr gemacht habe. – Anton3