2016-06-10 12 views
0

Ähnlich wie Post und this Post, ich möchte erkannte Schlüsselpunkte in elliptische Schlüsselpunkte konvertieren, indem Sie this Sample SURF Erkennung und passenden Code aus OpenCV-Bibliothek.Wie benutzt man eine Funktion von opencv?

Allerdings habe ich wenig Ahnung von C++ Syntax und bin nur mit Matlab vertraut. Vorherige Beiträge scheinen mit dem folgenden Code aus evaluation.cpp von opencv Bibliothek zu zeigen, sie zu konvertieren:

void EllipticKeyPoint::convert(const std::vector<KeyPoint>& src, std::vector<EllipticKeyPoint>& dst) 
{ 
    if(!src.empty()) 
    { 
     dst.resize(src.size()); 
     for(size_t i = 0; i < src.size(); i++) 
     { 
      float rad = src[i].size/2; 
      CV_Assert(rad); 
      float fac = 1.f/(rad*rad); 
      dst[i] = EllipticKeyPoint(src[i].pt, Scalar(fac, 0, fac)); 
     } 
    } 
} 

Die Eigenpunkte scheinen nach Linie 202 von Beispielcode generiert werden. Also versuchte ich folgendes zu ihnen elliptischen keypoints zu konvertieren durch Zugabe:

  • cv::EllipticKeyPoint::convert(keypoints1, keypoints1); nach Linie 202 und
  • using namespace cv::xfeatures2d::EllipticKeyPoint am Anfang des Codes

aber beide zeigten Fehler zu sagen:

  • name followed by '::' must be a class or namespace name und
  • namespace "cv::xfeatures2d" has no member "EllipticKeyPoint" respecti vely

Welche Klasse/Namespace/Mitglied sollte ich verwenden? Wie schreibe ich den Code richtig, damit ich diese Funktion verwenden kann, um Schlüsselpunkte in elliptische Schlüsselpunkte zu konvertieren?

Antwort

1

Welk ... sollten Sie uns Ihre genauen Code zeigen, wenn Sie vernünftige Antworten wollen, aber ...

Wenn ich mich nicht falsch, erscheint die Meldung „Namen, gefolgt von‚::‘muss eine Klasse sein oder der Name des Namensraums "ist irreführend: kann auch ein Name einer statischen Methode sein, das ist Ihre Absicht.

Das Problem, nehme ich an, ist ein anderes.

Es wird definiert zwei convert() statische Methoden in EllipticKeyPoint: die ersten Vektoren KeyPoint wandelt in Vektoren EllipticKeyPoint; die zweite konvertiert Vektoren von EllipticKeyPoint in Vektoren von KeyPoint.

Aber wenn man

cv::EllipticKeyPoint::convert(keypoints1, keypoints1); 

nennen versuchen Sie keypoints1 sich zu wandeln; so (Vektoren von) KeyPoint zu KeyPoint oder EllipticKeyPoint zu EllipticKeyPoint.

Und Ihnen fehlt diese Art von Konverter.

Ihre Absicht war die folgende?

cv::EllipticKeyPoint::convert(_keypoints1 , keypoints1); 

In calculateRepeatability() Ich sehe

EllipticKeyPoint::convert(_keypoints1, keypoints1); 
EllipticKeyPoint::convert(_keypoints2, keypoints2); 

so vorsichtig sein, mit Unterstrichen (_).

--- EDIT 2016.06.11 ---

Wenn Ihre Absicht ist es, die Vektoren von KeyPoint in Vektoren von EllipticKeyPoint, I suppose you should define, together keypoints1 and keypoints2`, ein anderes Paar von Vektoren, so etwas wie

std::vector<KeyPoint> keypoints1, keypoints2; 
std::vector<EllipticKeyPoint> ellkeypoints1, ellkeypoints2; 

und konvertieren, wenn keypoints1 und keypoints2 al geladen, Anruf convert(); Ich nehme an, etwas wie

std::cout << "FOUND " << keypoints1.size() << " keypoints on first image" << std::endl; 
std::cout << "FOUND " << keypoints2.size() << " keypoints on second image" << std::endl; 

EllipticKeyPoint::convert(keypoints1, ellkeypoints1); 
EllipticKeyPoint::convert(keypoints2, ellkeypoints2); 

std::cout << "FOUND " << ellkeypoints1.size() << " elliptic keypoints on first image" << std::endl; 
std::cout << "FOUND " << ellkeypoints2.size() << " elliptic keypoints on second image" << std::endl; 
+0

Der genaue Code ist der Beispiel-SURF-Code (3. Link aus dem Post). Ich hoffte, 1 oder 2 Zeilen hinzuzufügen, indem ich den frei verfügbaren Code in der opencv-Bibliothek verwendete. Ich habe versucht, Ihre 1 Codezeile zu dem Beispielcode hinzuzufügen, aber es hat nicht funktioniert. Mit diesem: 'cv :: evaluateFeatureDetector (img1.getMat (ACCESS_READ), img2.getMat (ACCESS_READ), H,);' scheint zu arbeiten, aber ich verstehe nicht, was das 3. Argument und so weiter will. Es sieht für mich sehr verwirrend aus mit den verschiedenen Arten von Symbolen. Kannst du erklären, was es bedeutet? – SK90

+0

Ich meine Symbole wie "<>, &, * und ::" und wie sie zusammenpassen sind verwirrend für mich, da ich C++ nicht kenne – SK90

+0

@ SK90 - Antwort verbessert zu erklären (hoffe) ho zu verwenden ' convert() '; über die Verwendung von "<>, &, * und ::", naja ... Sie können versuchen, nach einem einzelnen Beispiel zu fragen, aber es ist sehr schwierig, eine allgemeine Antwort zu geben; C++ ist eine komplexe Sprache und ich schlage vor, es mit einem guten Buch oder einem sehr guten Tutorial zu studieren – max66