Как использовать вектор вращения и трансляции OpenCV с OpenGL ES в Android?

Я работаю над базовым приложением дополненной реальности для Android. Что я сделал до сих пор, так это обнаружил квадрат с помощью opencv, а затем, используя cvFindExtrinsicCameraParams2 (), я вычислил вектор вращения и перемещения. Для этого я использовал 4 точки объекта, которые представляют собой только углы квадрата вокруг (0,0,0) и 4 угла квадрата на изображении.

Это дает мне довольно хорошую матрицу вращения и перевода. Я также рассчитал матрицу вращения с помощью cvRodrigues2 (), поскольку использовать ее проще, чем вектор вращения. Пока я использую их, чтобы рисовать точки на изображении, все работает нормально. Однако мой следующий шаг - передать эти векторы и матрицу обратно в java, а затем использовать их с OpenGL для рисования квадрата в OpenGLView. Квадрат должен быть точно вокруг квадрата на изображении, которое отображается за OpenGLView.

Моя проблема в том, что я не могу найти правильный способ использования матрицы вращения и вектора трансляции в OpenGL. Я начал с тех же точек объекта, что и для функций openCV. Затем я применил матрицу вращения и вектор переноса практически любым возможным способом, который мог придумать. К сожалению, ни один из этих подходов не дал результата, близкого к тому, на что я надеялся. Может кто подскажет, как правильно ими пользоваться?

На данный момент самые "близкие" результаты, которые я получил, было при случайном умножении всей матрицы на -1. Но в большинстве случаев квадраты по-прежнему выглядят зеркально перевернутыми или повернутыми на 180 градусов. Так что я думаю, это был просто удачный удар, но неправильный подход.

14
задан ROMANIA_engineer 13 December 2017 в 20:38
поделиться