2016-07-30 168 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版本。我修改了我的代碼以使用cv::UMat。不幸的是,執行時間不會改變。 HAS_OPENCL已設置,cv::ocl::useOpenCL()爲true。有什麼可能出錯?

+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

@Micka不幸的是,這與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,所以可能很多非自由的功能屬於他們。 – Micka

回答

0

我知道,我是有點晚了這一點,但看surf.cppSURF_Impl::detectAndCompute開始於#ifdef HAVE_OPENCL,所以我認爲,如果你建的OpenCV啓用的OpenCL,OpenCL是默認使用

+0

好吧,但這意味着在我的計算機上,OpenCL的執行速度比CUDA慢10倍。對我來說似乎很陌生。 – Anton3

+0

@ Anton3就像你在使用哪個CUDA SURF實現一樣?使用GPU方法,您平均只需描述**一張**圖像需要多長時間?請儘可能指定圖像大小和使用的GPU – justHelloWorld

+0

我使用OpenCV中的SURF_CUDA。 SURF_CUDA大約需要0.2秒,SURF類正常大約需要2秒。圖像尺寸是1920x1080,GPU是GTX 970.編輯:好吧,它花了,因爲我半年前做了測試。 – Anton3