2016-07-30 1 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); 
} 

가 지금은 SURF의 오픈 CL 버전을 사용하려고합니다. 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 불행히도, 이것은 3.0이 아닌 OpenCL 2.4와 관련이 있습니다. 'SURF_OCL'도 거기에 존재하지 않습니다. – Anton3

+1

'cv :: ocl :: setUseOpenCL (true);를 명시 적으로 호출 해 보았습니까? 그러나 http://answers.opencv.org/question/63452/opencv-30-the-performance-of-umat/에는 새로운 API로 변환되지 않은 많은 함수가있을 수 있으므로 아마도/많은 비 자유 함수가 그것들에 속한다. – Micka

답변

0

늦어서 이것에 대한 약간의이야 알지만, surf.cpp를 찾고, #ifdef HAVE_OPENCLSURF_Impl::detectAndCompute 시작, 그래서 나는 OpenCL을 활성화 당신이 OpenCV의를 구축하는 경우, OpenCL을가했던

+0

좋아요, 그렇다면 OpenCL 구현이 내 컴퓨터의 CUDA보다 10 배 느린 것입니다. 나에게 이상하게 보입니다. – Anton3

+0

@ Anton3과 마찬가지로 info : 어떤 CUDA SURF 구현을 사용하고 있습니까? 평균적으로 GPU 접근법을 사용하여 ** 이미지 하나만을 설명하는 데 얼마나 걸리나요? 가능한 경우 이미지 크기 및 사용 된 GPU를 지정하십시오. – justHelloWorld

+0

OpenCV에서 SURF_CUDA를 사용합니다. SURF_CUDA의 경우 약 0.2 초, 일반 SURF 클래스의 경우 약 2 초가 소요됩니다. 이미지 크기는 1920x1080이고, GPU는 GTX 970입니다. 편집 : 글쎄요, 나는 반세기 전에 테스트를했기 때문에했습니다. – Anton3

관련 문제