OpenCV - segfault实例化冲浪特征探测器

时间:2013-08-19 17:10:22

标签: c++ opencv feature-detection

我在x86_64架构上使用OpenCV 2.4.6.1的C ++实现用于Ubuntu 12.10。我一直在试验一些特征探测器。最近我在通过FeatureDetector :: create方法实例化SURF探测器时发现了一个问题。

我可以通过以下方式实例化并使用免费的检测器,如FAST或BRISK:

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

但我在早期获得分段错误,我实例化并尝试使用非自由探测器,如SURF或SIFT:

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

尽管如此,我可以直接使用实现它们的具体类来实例化它们:

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

我要求在运行时热切换检测器/描述符,虽然我可以调整我的系统以在选择时实例化SURF和SIFT检测器,但我认为正确的处理方式是通过提供实例的工厂类。

我无法弄清楚为什么会发生这种情况,在Web上使用FeatureDetector工厂的几个例子中,这种类型的探测器是完全合法的。我尝试为非自由模块添加标题但得到了相同的结果。

我很感激任何见解。

1 个答案:

答案 0 :(得分:4)

调用cv :: initModule_nonfree();在主要方面,在做任何其他事情之前。