Ich arbeite an einer grundlegenden Augmented-Reality-Anwendung für Android. Was ich bisher gemacht habe ist, ein Quadrat mit opencv zu erkennen und dann cvFindExtrinsicCameraParams2() zu verwenden. Ich berechnete einen Rotations- und Translationsvektor. Dazu habe ich 4 Objektpunkte verwendet, die nur die Ecken eines Quadrats um (0,0,0) und die 4 Ecken des Quadrats im Bild sind.Wie benutzt man einen OpenCV-Dreh- und Übersetzungsvektor mit OpenGL ES in Android?
Das ergibt mir eine ziemlich gute Rotation und Translationsmatrix. Ich habe auch die Rotationsmatrix mit cvRodrigues2() berechnet, da dies einfacher ist als der Rotationsvektor. Solange ich diese verwende, um einige Punkte im Bild zu zeichnen, funktioniert alles gut. Mein nächster Schritt ist jedoch, diese Vektoren und die Matrix zurück an Java zu übergeben und sie dann mit OpenGL zu verwenden, um ein Quadrat in einer OpenGLView zu zeichnen. Das Quadrat sollte genau um das Quadrat in dem Bild sein, das hinter der OpenGLView angezeigt wird.
Mein Problem ist, dass ich nicht die richtige Art der Verwendung der Rotationsmatrix und Übersetzungsvektor in OpenGL finden kann. Ich habe mit genau den gleichen Objektpunkten angefangen wie für die openCV-Funktionen. Dann habe ich die Rotationsmatrix und den Translationsvektor so gut wie möglich angewendet. Leider führt keiner dieser Ansätze zu einem Ergebnis, das in etwa dem entspricht, was ich mir erhofft habe. Kann mir jemand sagen, wie man sie richtig benutzt?
Bis jetzt waren die "nächsten" Ergebnisse, die ich erhalten habe, die zufällige Multiplikation der gesamten Matrix mit -1. Meistens sehen die Quadrate jedoch spiegelverkehrt oder um 180 Grad gedreht aus. Also ich denke, es war nur ein Glückstreffer, aber nicht der richtige Ansatz.
Vielleicht müssen Sie [transpose] (http://opencv.willowgarage.com/wiki/Posit) etwas. – genpfault