2012-01-13 50 views
1

我使用FlannBasedMatcher根據http://opencv.itseez.com/doc/tutorials/features2d/feature_homography/feature_homography.html#feature-homography。每次運行此行時,我都會收到錯誤「vector subscript out of range」double dist = matches [i] .distance;「任何人都可以幫忙嗎?我在這裏呆了一段時間..Opencv DMatch距離超出範圍

int minHessian = 400; 

    SurfFeatureDetector detector(minHessian); 

    std::vector<KeyPoint> keypoints_object, keypoints_scene; 

    detector.detect(img_object, keypoints_object); 
    detector.detect(img_scene, keypoints_scene); 

    //-- Step 2: Calculate descriptors (feature vectors) 
    SurfDescriptorExtractor extractor; 

    Mat descriptors_object, descriptors_scene; 

    extractor.compute(img_object, keypoints_object, descriptors_object); 
    extractor.compute(img_scene, keypoints_scene, descriptors_scene); 

    //-- Step 3: Matching descriptor vectors using FLANN matcher 
    FlannBasedMatcher matcher; 
    std::vector<DMatch> matches; 
    matcher.match(descriptors_object, descriptors_scene, matches); 

    double max_dist = 0; double min_dist = 100; 

    //-- Quick calculation of max and min distances between keypoints 
    for(int i = 0; i < descriptors_object.rows; i++) 
    { double dist = matches[i].distance; 
    if(dist < min_dist) min_dist = dist; 
    if(dist > max_dist) max_dist = dist; 
    } 

    printf("-- Max dist : %f \n", max_dist); 
    printf("-- Min dist : %f \n", min_dist); 

回答

0

也許你不能從你的圖片獲得足夠的功能?檢查關鍵點的大小。

+0

關鍵點大小爲100 – 2012-03-01 05:25:58

+0

,它仍然不起作用。現在它顯示超時時間錯誤 – 2012-03-01 19:49:11

+0

匹配器似乎找不到和匹配eventhough兩個圖像是相同的。比賽仍然是空的。 – 2012-03-01 19:58:33

0

你想用這樣的:

vector< vector<DMatch> > matches; 

這是DMatch的載體的載體!

+0

然後,FlannBasedMatcher :: match將聲明沒有與參數列表匹配的實例 – 2012-03-22 02:33:50

+0

這很奇怪......如果您在拼接模塊中查看文件matchers.cpp:169,那正是他們所做的! – widgg 2012-03-23 16:25:41

0

如果您從未解決過這個問題,請確保您使用的是正確類型的矢量,第一個應該是std::vector,而第二個應該是cv::vector。所以,如果你不使用任何命名空間就應該是這樣的:

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