2016-07-30 31 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