OpenCV C++ Interface: Vector zu Matrix Problem



  • Hallo,

    ich benutze die Version OpenCV2.0.0a und das neue C++ Interface von OpenCV.

    Ich lese Bilder von einer Webcam ein, dann verwende ich die Surf funktion.
    Anschließend will ich die gefundenen Schlüsselpunkte in einen KD-Suchbaum speichern.
    Ich habe nun das Problem dass ich nicht weis wie ich aus einer vectorcv::KeyPoint, in dem die Schlüsselpunkte nach der Surf Funktion drin stehen, eine cv::Mat erstelle, die z.B. cv::KDTree oder cv::flann::Index benötigt.

    Ich hoffe ihr könnt mir helfen vielen dank schon mal im voraus

    cya



  • Das wäre eher etwas für ein spezifischeres Forum für die Bibliothek, aber wenn es dir um den Zugriff auf den vector geht, kannst du dich mal hier schlau machen:

    http://www.cplusplus.com/reference/stl/vector/

    Insbesondere mit Iteratoren solltest du dich beschäftigen, über die der Zugriff geht.



  • Ich habe leider einen Fehler gemacht.
    1. Fehler: Man muss die Descriptoren und nicht die Keypoints nehmen um den Suchbaum aufzubauen. Dadurch macht erst ein kd-Suchbaum Sinn.

    2. Fehler ich kann keine Matrix mit float datenfeld erstellen. Mit
    cv::Mat test(rows, cols, CV_32F);
    oder mit
    cv::Mat_<float> test(rows,cols,CV_32F);
    ist immer noch das data feld unsigned char. Jedoch sind die Descriptoren, die in einem std::vector zurückgegeben werden, in float. Eine Konvertierung ist nicht sinnvoll da zum Teil sehr kleine Werte entstehen können. Kann mir hier jemand helfen?

    Dann müsste ich doch mit
    test.data[i] = descriptor[i];
    die Daten vom vector in die Matrix schreiben, oder bin ich hier falsch?
    Gibt es noch andere möglichkeiten? Mein Problem zu lösen?
    Ich habe auch schon mit memcpy versucht hat aber leider auch nicht funktioniert.


Anmelden zum Antworten