2014-07-01 45 views
1

我正在嘗試使用Sift,但我有一個錯誤。我不明白爲什麼。OpenCV:聲明失敗使用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() 

Howewer當我用SIFT用這種方式,例如:

detector = new SiftFeatureDetector(400) 

它的工作原理!但我不知道這是什麼參數,因爲文檔,這是類似的東西:

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

你能解釋一下我,請告訴我我做錯了什麼?感謝

回答

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; 

所以你的情況,你通過錯誤的參數,這應該解釋異常情況。

+0

我明白了!我沒有看到!謝謝 ! – lilouch

相關問題