Druckwerte der Keypoint-Deskriptormatrix opencv

8

Ich habe Probleme beim Drucken der Werte der Deskriptormatrix, die durch die Methode 'compute' eines beliebigen opencv-Deskriptor-Extraktors erhalten wurde. Ich möchte den Deskriptor eines Features in einer Datei einzeln drucken, aber immer wenn ich auf ein Element der Deskriptor-Matrix mit 'at' zugreife, erhalte ich einen anderen Wert für dieses Element. Das Folgende ist eine 'for'-Schleife, die ich verwendet habe, um den Ausgabewert der Deskriptormatrix zu testen, wenn' at 'verwendet wird:

%Vor%

Das zweite 'wenn' ist ein Test 'wenn' ich gemacht habe, um die gedruckten Werte zu sehen, wenn ich auf die Elemente der Deskriptoren zugreife. Jetzt gedruckt von der

%Vor%

bei der nF - 2 - Iteration habe ich folgendes Ergebnis:

%Vor%

Und wie erwartet, die ersten zwei Drucke innerhalb der zweiten 'wenn':

%Vor%

gib mir [20]

Aber die anderen zwei Drucke

%Vor%

und

%Vor%

geben Sie mir 0 statt 20. Das vollständige Ergebnis, das ich für die Zeile nF-2 hatte, habe ich zuvor gezeigt, als ich auf die Elemente mit 'at' zugegriffen und sie gedruckt habe:

%Vor%

Was völlig anders ist als das, was ich erwartet habe. Ich habe schon viele Dinge ausprobiert: Casting mit float, double, unsigned int statt nur int, und auch Variablen dieser Typen zuweisen; die Matrix vor dem Drucken konvertieren, die Matrix kopieren und dann konvertieren, die Deskriptormatrix mit einem anderen Typ erstellen ... aber keiner von ihnen hat funktioniert. Ich vermute, dass es etwas mit dem Typ der Deskriptor-Matrix zu tun hat, obwohl ich fast sicher bin, dass es den UCHAR-Typ hat (ich überprüfte mit elemSize)

Vielen Dank im Voraus und Entschuldigung für mein Englisch und die Größe der Frage.

    
Alberto A 02.05.2012, 16:45
quelle

2 Antworten

7

Die Antwort gefunden. Es war in der Tat ein Typproblem. Der Typ der von mir zurückgegebenen Deskriptormatrix ist nicht so wie ich dachte, es ist eigentlich float. Abrufen des Werts mit

%Vor%

gibt mir den richtigen Wert. Lustige Sache ist, ich könnte schwören, dass ich es vorher für Float probiert habe, und es hat nicht funktioniert. Ich muss es nur für int, double und unsigned Int versucht haben.

    
Alberto A 03.05.2012, 16:17
quelle
1

Dies beantwortet nicht, warum Ihr Problem auftritt, aber ich erinnere mich an ähnliche Probleme beim Versuch, auf meine Deskriptorwerte zuzugreifen.

Ich habe versucht, einen Code zu schreiben, der mit jedem Deskriptor funktionieren würde, da OpenCV mehrere cv::DescriptorExtractor s implementiert hat. Die Sache ist, da ich irgendwann in der Lage sein werde, meine eigenen OpenCV-unabhängigen Bibliotheken zu erstellen, die mit meinen Deskriptor-Interfaces arbeiten, wollte ich alle Deskriptoren in std::vector<vector<double> > structures.

Hier ist mein Code, der cv::Mat descOld in std::vector< std::vector <double> > desc konvertiert:

%Vor%

Hoffe es hilft einigen.

    
penelope 03.05.2012 07:41
quelle