OpenCV:为什么SIFT和SURF探测器会崩溃?

the*_*oon 2 c++ opencv gcc4.9

为什么SIFT和SURF探测器会崩溃?

using namespace std;
using namespace cv;

int main(int argc, char *argv[])
{        
  Mat image = imread("TestImage.jpg");

  // Create smart pointer for SIFT feature detector.
  Ptr<FeatureDetector> featureDetector = FeatureDetector::create("SIFT");
  vector<KeyPoint> keypoints;

  // Detect the keypoints
  featureDetector->detect(image, keypoints); // here crash
  // ...
}
Run Code Online (Sandbox Code Playgroud)

错误是Segmentation fault (core dumped).我使用OpenCV 2.4.8,gcc 4.9和Ubuntu.如果我使用其他类型的功能,它会正常运行.我错过了什么?

rem*_*emi 10

你试过电话initModule_nonfree()吗?

#include <opencv2/nonfree/nonfree.hpp>
using namespace std;
using namespace cv;

int main(int argc, char *argv[])
{
  initModule_nonfree();
  Mat image = imread("TestImage.jpg");

  // Create smart pointer for SIFT feature detector.
  Ptr<FeatureDetector> featureDetector = FeatureDetector::create("SIFT");
  vector<KeyPoint> keypoints;

  // Detect the keypoints
  featureDetector->detect(image, keypoints); // here crash
  // ...
}
Run Code Online (Sandbox Code Playgroud)

另外,你没有检查指针featureDetector,它可能是null(因为你还没有调用initModule).

  • 似乎`initModule_nonfree()`是问题...我不知道它 (2认同)