2012-01-13 10 views
1

私はhttp://opencv.itseez.com/doc/tutorials/features2d/feature_homography/feature_homography.html#feature-homographyに従ってFlannBasedMatcherを使用しています。私は、この行を実行するたびに「ベクトル添え字が範囲外です」というエラーが出ています。「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 –

+0

、それはまだdoesntの仕事です。今度は、オーバーラン時間エラー –

+0

を表示します。マッチャーは、両方の画像が同じであるにもかかわらず見つからないように見えます。マッチは空のままです。 –

0

あなたはこれを使用したい:

vector< vector<DMatch> > matches; 

それはDMatchのベクトルのベクトルです!

+0

FlannBasedMatcher :: matchは、引数リストに一致するインスタンスがないことを示します –

+0

これは変です... stitchingモジュールのmatchers.cpp:169ファイルを見れば、それはまさに彼らが行ったことです! – widgg

0

これを解決しなかった場合は、正しい種類のベクターを使用していることを確認してください。最初のベクターはstd::vector、もう1つはcv::vectorです。あなたが任意の名前空間を使用していないのであれば、それは次のようになります。

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