2013-08-19 1 views
1

x86_64 아키텍처에서 OpenCV 2.4.6.1의 C++ 구현을 Ubuntu 12.10 용으로 사용하고 있습니다. 필자는 몇 가지 기능 감지기를 실험 해 왔습니다. 최근 FeatureDetector :: create 메서드를 통해 SURF 감지기를 인스턴스화하는 동안 문제가 발견되었습니다.OpenCV - segfault 인스턴스화 서프 피처 감지기

cv::Ptr<cv::FeatureDetector> detector = cv::FeatureDetector::create("FAST"); 
cv::Ptr<cv::FeatureDetector> detector = cv::FeatureDetector::create("BRISK"); 

을하지만 난 인스턴스화와 같은 비 무료 탐지기를 사용하려고 초 순간 세그먼트 오류를 ​​획득하고있다 : 나는 인스턴스화 수행하여 같은 FAST 또는 BRISK 무료 탐지기를 사용할 수 있어요

SURF는 또는 수행하여 SIFT :

cv::Ptr<cv::FeatureDetector> detector = new cv::SurfFeatureDetector(); 
cv::Ptr<cv::FeatureDetector> detector = new cv::SiftFeatureDetector(); 
:

cv::Ptr<cv::FeatureDetector> detector = cv::FeatureDetector::create("SURF"); 
cv::Ptr<cv::FeatureDetector> detector = cv::FeatureDetector::create("SIFT"); 

는 그럼에도 불구하고 내가 직접 구현하는 구체적인 클래스를 사용하여 인스턴스화 할 수 있습니다

런타임시 탐지기/설명자를 핫 전환해야하지만 시스템 선택시 SURF 및 SIFT 감지기를 인스턴스화하기 위해 시스템을 조정할 수는 있지만 인스턴스를 제공하는 팩토리 클래스를 통한 올바른 진행 방법을 고려해야합니다.

이 유형 감지기에 대한 FeatureDetector 팩토리를 사용하는 웹의 몇 가지 예에서 이것이 발생하는 이유를 알 수 없습니다. nonfree 모듈의 헤더를 추가하려고 시도했지만 같은 결과가 나타납니다.

나는 통찰력을 가져 주셔서 감사하겠습니다.

+4

cv :: initModule_nonfree();를 호출하는 것을 잊지 않았습니까? 메인에서, 다른 일을하기 전에? – GilLevi

+0

감사합니다. 비록 [SURF documentation] (http://docs.opencv.org/trunk/modules/nonfree/doc/feature_detection.html#surf-operator)에 나와 있기 때문에 혼란 스럽지만 나는 그것이 작동한다고 알고 있습니다. .hpp 헤더를 포함하고 있기 때문에 항상 C++ 버전을 사용하고 있다고 생각하는 동안 C 버전을 사용합니다. – gantzer89

답변

4

call cv :: initModule_nonfree(); 메인에서, 다른 일을하기 전에.

+1

'오류 C2039 : 'initModule_nonfree': 'cv'의 멤버가 아니며, #include '처음 –