Estoy trabajando en una aplicación básica de realidad aumentada en Android. Lo que hice hasta ahora es detectar un cuadrado con opencv y luego usar cvFindExtrinsicCameraParams2() Calculé un vector de rotación y traducción. Para esto usé 4 puntos de objeto, que son solo las esquinas de un cuadrado alrededor (0,0,0) y las 4 esquinas del cuadrado en la imagen.¿Cómo usar un vector de traducción y rotación de OpenCV con OpenGL ES en Android?
Esto me da una matriz de rotación y traducción bastante buena. También calculé la matriz de rotación con cvRodrigues2() ya que usar esto es más fácil que el vector de rotación. Siempre que los use para dibujar algunos puntos en la imagen todo funciona bien. Sin embargo, mi siguiente paso es pasar estos vectores y la matriz a Java y luego usarlos con OpenGL para dibujar un cuadrado en un OpenGLView. El cuadrado debe estar exactamente alrededor del cuadrado en la imagen que se muestra detrás de OpenGLView.
Mi problema es que no puedo encontrar la forma correcta de usar la matriz de rotación y el vector de traducción en OpenGL. Empecé con exactamente los mismos puntos de objeto que usé para las funciones de openCV. Luego apliqué la matriz de rotación y el vector de traducción prácticamente de cualquier manera que pudiera pensar. Lamentablemente, ninguno de estos enfoques produce un resultado que, de todos modos, esté cerca de lo que esperaba. ¿Alguien puede decirme cómo usarlos correctamente?
Hasta ahora, los resultados "más cercanos" que he obtenido han sido al multiplicar aleatoriamente toda la matriz con -1. Pero la mayoría de las veces los cuadros aún se ven invertidos o girados en el espejo por 180 grados. Así que supongo que fue solo un golpe de suerte, pero no el enfoque correcto.
Quizás necesite [transponer] (http://opencv.willowgarage.com/wiki/Posit) algo. – genpfault