2013-06-04 173 views
0

我試圖用SIFT匹配兩幅圖像,我用下面的代碼:SIFT斷言失敗錯誤

cv::initModule_nonfree(); 

cv::Mat matFrame(frame); 
cv::Mat matFrameAnt(frameAnterior); 

cv::SiftFeatureDetector detector(400);   //I've tried different values here 
cv::SiftDescriptorExtractor extractor(400);  //but i get always the same error 

std::vector<cv::KeyPoint> keypoints1; 
std::vector<cv::KeyPoint> keypoints2; 

detector.detect(matFrame, keypoints1); 
detector.detect(matFrameAnt, keypoints2); 

cv::Mat feat1; 
cv::Mat feat2; 
cv::Mat descriptor1; 
cv::Mat descriptor2; 

extractor.compute(matFrame, keypoints1, descriptor1); 
extractor.compute(matFrameAnt, keypoints2, descriptor2); 

    std::vector<cv::DMatch> matches; 

cv::BFMatcher matcher(cv::NORM_L2, false); 

matcher.match(descriptor1,descriptor2, matches); 

cv::Mat result; 
cv::drawMatches(matFrame, keypoints1, matFrameAnt, keypoints2, matches, result); 

cv::namedWindow("SIFT", CV_WINDOW_AUTOSIZE); 
cv::imshow("SIFT", result); 

當我運行的代碼(它編譯完美),我得到這個錯誤。

「的OpenCV錯誤:斷言失敗(firstOctave> = -1 & & actualNlayers < = nOctaveLayers)中的功能未知,文件...... \ SRC \的OpenCV \模塊\非遊離\ SRC \ sift.cpp,線755" 。

據我所知,該函數得到一個非正值,所以我打印了所有可能的值從我的代碼,我發現我的兩個關鍵點向量的大小是-616431和-616422。 我使用的兩張圖像是黑色&白色圖像,黑色底色和中間的手(白色)。

發生了什麼事?我是否使用無效圖像?我使用的功能cv :: SiftFeatureDetector和cv :: SiftDescriptorExtractor錯誤?

+0

好的,我明白了。 cv :: SiftFeatureDetector檢測器(50); cv :: SiftDescriptorExtractor提取器; 它使用這些參數。 –

回答

0

看來你不知道你在做什麼。這個功能還沒有公開,因此請嘗試挖掘源代碼,或讓我告訴你你做了什麼。

cv::SiftFeatureDetector detector(50) 

這意味着您將至多得到50場比賽。

cv::SiftDescriptorExtractor extractor(400); 

這意味着您的extration放大倍數爲400x。對於正常結果,該參數應該爲「1」。

其餘的文檔在這裏:http://docs.opencv.org/2.3/modules/features2d/doc/common_interfaces_of_feature_detectors.html#SiftFeatureDetector