首页 文章

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

提问于
浏览
1

我在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工厂的几个例子中,这种类型的探测器是完全合法的 . 我尝试为非自由模块添加 Headers 但得到了相同的结果 .

我很感激任何见解 .

1 回答

  • 4

    call cv :: initModule_nonfree();在主要方面,在做任何事之前 .

相关问题