OpenCV:断言使用SIFT的两个构造函数之一失败

时间:2014-07-01 17:11:10

标签: c++ opencv sift

我正在尝试使用Sift,但我有一个错误。我不明白为什么。

我这样做:

detector = new SiftFeatureDetector(0.03,//feature threshold
                                 10);//threshold to reduce sensitivity to lines,
SiftDescriptorExtractor extractor;

然后我收到这个错误:

OpenCV Error: Assertion failed (firstOctave >= -1 && actualNLayers <= nOctaveLayers) in operator(), file terminate called after throwing an instance of 'cv::Exception'  
what():  /home/opencv-2.4.6.1/modules/nonfree/src/sift.cpp:755: error: (-215) firstOctave >= -1 && actualNLayers <= nOctaveLayers in function operator()  

当我以这种方式使用SIFT时,例如:

detector = new SiftFeatureDetector(400)

它有效!但我不知道这个参数是什么,因为在文档中就是这样的:

SiftFeatureDetector( double threshold, double edgeThreshold,...)

请你解释一下,告诉我我做错了什么?感谢

1 个答案:

答案 0 :(得分:4)

根据异常日志,您正在使用OpenCV 2.4.6.1。

那说你可能是指以前的OpenCV版本的文档。如下所示,构造函数已在2.3.0和2.4.0之间进行了修改:

<强> OpenCV 2.3.0

SiftFeatureDetector( double threshold, double edgeThreshold, ... );

<强> OpenCV 2.4.0

explicit SIFT( int _nfeatures=0, int _nOctaveLayers=3,
          double _contrastThreshold=0.04, double _edgeThreshold=10,
          double _sigma=1.6);

// ...

typedef SIFT SiftFeatureDetector;
typedef SIFT SiftDescriptorExtractor;

因此,在您的情况下,您传递了错误的参数,这可以解释异常情况。