我正在尝试使用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,...)
请你解释一下,告诉我我做错了什么?感谢
答案 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;
因此,在您的情况下,您传递了错误的参数,这可以解释异常情况。