Одинаковая позиция маркера, разные матрицы поворота и перевода - OpenCV - PullRequest
0 голосов
/ 17 ноября 2011

Я работаю над программой обнаружения маркеров дополненной реальности, использую OpenCV и получаю два разных значения поворота и перемещения для одного и того же маркера .

3D-модель автоматически переключается между этими состояниями без моего контроля, когда камера слегка перемещается. Скриншоты вышеупомянутых двух ситуаций добавляются ниже. Я хочу, чтобы изображение № 1 было правильным. Как и где это исправить?

Я следовал Как использовать вектор вращения и перевода OpenCV с OpenGL ES в Android? для создания матрицы проекции для OpenGL. например:

// code to convert rotation, translation vector
glLoadMatrixf(ConvertedProjMatrix);
glColor3f(0,1,1) ;
glutSolidTeapot(50.0f);

Изображение № 1 enter image description here

Изображение № 2 enter image description here

Дополнительный

Я был бы рад, если бы кто-нибудь предложил мне, как заставить Чайник сидеть на плоскости маркера. Я знаю, что должен редактировать матрицу вращения. Но как лучше всего это сделать?

Ответы [ 2 ]

0 голосов
/ 22 августа 2012

Вы пытались поменять алгоритм позы (ITERATIVE, EPNP, P3P)? Или, возможно, используйте значения из предыдущего расчета - помните, что он просто дает вам «лучшее предположение».

0 голосов
/ 19 ноября 2011

Для вращения чайника вы можете использовать glRotatef ().Если вы хотите повернуть текущую матрицу, например, на 125 ° вокруг оси y, вы можете позвонить:

glRotate(125,0,1,0);

Я не могу разобрать текущую ориентацию вашего чайника, но, думаю, вам понадобитсячтобы повернуть его на 90 ° вокруг оси X.

Я не имею представления о вашей первой проблеме, кажется, OpenCV не может решить, какая из показанных позиций является "правильной".Это зависит от того, какие функции ищет OpenCV (края, высокая контрастность, уникальные точки ...) и как вы это реализовали.

...