2017-05-25 3 views
1

Opencv 3.2 C++. Ich erstelle eine Methode, die einen beliebigen Satz von Schlüsselpunktdeskriptoren verwenden kann und einen der vom Benutzer angegebenen Übereinstimmungsalgorithmen verwendet. Wenn ich versuche, meinen Code zu erstellen, erhalte ich folgende Fehler.OpenCV C++ Flann IndexParams und SearchParams Fehler

  1. cv :: flann :: IndexParams :: ~ IndexParams(), verwiesen von:
  2. cv :: flann :: SearchParams :: SearchParams (int, float, bool), verwiesen von:
  3. cv :: flann :: KDTreeIndexParams :: KDTreeIndexParams (int), bezogen von:
  4. Klirren: Fehler: Linker Befehl fehlgeschlagen mit Exit-Code 1 (Verwendung -v Aufruf zu sehen)

UPDATE - Wenn ich laufen das Standard-Flann-Tutorial auf OpenCV-Website in erhabener Ausführung findet es ohne Fehler statt Oder. Dies lässt mich glauben, dass das Problem bei Xcode liegt, bin aber immer noch nicht hundertprozentig sicher.

Ich verwende xcode und bin immer noch herauszufinden, die Schnittstelle und es gibt keine spezifischen wie angegeben, um den Fehler zu verursachen. Mein Code ist wie folgt: `

std::tuple<std::vector<DMatch>,Mat> matchFeatures(std::vector<KeyPoint> kp1, Mat desc1, std::vector<KeyPoint> 
kp2, Mat desc2, String keypointsMatcher){ 
    std::vector<DMatch> matches; 
    vector<vector<DMatch>> knnMatches; 
    double max_dist = 0, min_dist = 100; 
    Mat homography; 

    if(keypointsMatcher == "bruteForce"){ 
     BFMatcher matcher; 
     matcher.match(desc1, desc2, matches); 
    } 
    else if(keypointsMatcher == "flann"){ 
     if(desc1.type()!=CV_32F) { 
      desc1.convertTo(desc1, CV_32F); 
     } 
     if(desc2.type()!=CV_32F) { 
      desc2.convertTo(desc1, CV_32F); 
     } 

     FlannBasedMatcher matcher; 
     matcher.match(desc1, desc2, matches); 
    } 
    //-Run Knn Flann based matcher. Will create a vector of vectors (vector<vector<DMatch>>) 
    else if (keypointsMatcher == "knn"){ 
     if(desc1.type()!=CV_32F) { 
      desc1.convertTo(desc1, CV_32F); 
     } 
     if(desc2.type()!=CV_32F) { 
      desc2.convertTo(desc1, CV_32F); 
     } 

     FlannBasedMatcher matcher; 
     matcher.knnMatch(desc1, desc2, knnMatches, 2); 
    } 

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


    return{matches,homography}; 

}`

Jede Hilfe ist willkommen!

Antwort

1

Ich entdeckte, dass das Problem mit den Header-Dateien zu tun war. In OpenCV scheint es, dass Flann seinen eigenen Rahmen außerhalb hat:

#include <opencv2/features2d.hpp> 
#include <opencv2/xfeatures2d.hpp> 

zu lösen einfach hinzufügen, um diesen folgenden Header und genau verknüpft die .hpp-Datei.

#include <opencv2/flann.hpp> 
0

@ C.Radford Sie Ihren Code überprüfen sollte, sollte desc2.convertTo(desc1, CV_32F)desc2.convertTo(desc2, CV_32F); sein

if(desc1.type()!=CV_32F) { 
    desc1.convertTo(desc1, CV_32F); 
} 
if(desc2.type()!=CV_32F) { 
    //desc2.convertTo(desc1, CV_32F); 
    desc2.convertTo(desc2, CV_32F); 
}