在OpenGL中使用OpenCV像素坐标绘制正方形

时间:2011-11-13 17:02:20

标签: opengl opencv

我有一个由OpenCV为Square标记生成的4x2 2D顶点数组。我想在OpenGL坐标系中使用这些坐标在标记的精确位置绘制2D Quad。怎么做?

这是我的代码,如下所示,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 :(得分:0)

您似乎没有相同的坐标系(CS)。您的OpenCV顶点是2D。您需要首先校准OpenGL CS,然后应用尺寸因子。你只想使用2个点(你的一个方边或诊断的极值点)来做这个。否则你需要一个更复杂的算法来使用你拥有的所有顶点信息(如果你的方形成为其他东西,例如菱形)。

简单的方法是为您的OpenGL方形CS添加第一个点的转换因子+一个尺寸因子和方向:)

我猜你的OpenGL场景处于正交(正交)模式,你的方块仍然是正方形而不是菱形。