Использование пиксельных координат OpenCV в OpenGL для рисования квадрата - PullRequest
0 голосов
/ 13 ноября 2011

У меня есть массив двумерных вершин 4x2, сгенерированный OpenCV для квадратного маркера.Я хочу использовать эти координаты в системе координат OpenGL, чтобы нарисовать 2D-квад в точном местоположении маркера.Как это сделать?

Вот мой код, как вы можете видеть ниже, что двумерный четырехугольник нарисован меньше, чем маркер.

// 'CvMat* dstPoints2D' is generated using cvProjectPoints2()
glPushMatrix();      
glBegin(GL_QUADS); 
glVertex2f((float)dstPoints2D->data.fl[2], (float)dstPoints2D->data.fl[3]); // right, bottom
glVertex2f((float)dstPoints2D->data.fl[0], (float)dstPoints2D->data.fl[1]); //Left, bottom
glVertex2f((float)dstPoints2D->data.fl[4], (float)dstPoints2D->data.fl[5]); // left, top      
glVertex2f((float)dstPoints2D->data.fl[6], (float)dstPoints2D->data.fl[7]); // right, top
glEnd();
glPopMatrix();

enter image description here

enter image description here

1 Ответ

0 голосов
/ 11 марта 2012

Кажется, что у вас не та же система координат (CS). Ваши OpenCV вершины 2D. Сначала вам нужно будет откалибровать OpenGL CS, а затем применить размерный коэффициент. Вы хотели бы сделать это, используя только 2 точки (точки экстремума одной из ваших квадратных сторон или диагнозы). В противном случае вам понадобится более сложный алгоритм, чтобы соответствовать всей имеющейся у вас информации о вершинах (в случае, если ваш квадрат станет чем-то другим, например, ромбом).

Самый простой способ - добавить коэффициент перевода в вашу квадратную CS OpenGL для первой точки + коэффициент размера и направление:)

Я полагаю, ваша сцена OpenGL находится в орто (орфографическом) режиме, а ваш квадрат остается квадратом, а не ромбом.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...