在我的作品中,我将捕捉到的帧的一部分与图像重叠。我用openCV打开我的摄像头,然后在纹理中转换捕获的帧,并在GLUT窗口中显示它。另外,我将此纹理的一部分与此图像重叠:

我实时地做这件事,结果是:

如你所见,投影图像的边缘是不准确的。我认为这是一个锯齿问题,但我不知道如何使用opengl进行抗锯齿处理。我试着在网上寻找,但我没有找到一个好的解决我的问题的方法。
在我的"calculate“函数中,我将mat图像转换为纹理,并使用以下代码:
GLvoid calculate(){
...
...
cvtColor(image, image, CV_BGR2RGB);
glHint(GL_PERSPECTIVE_CORRECTION_HINT,GL_NICEST);
glPixelStorei(GL_UNPACK_ALIGNMENT, 1);
glBindTexture(GL_TEXTURE_2D, textures[1]);
glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_LINEAR);
glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_LINEAR);
//glTexImage2D(GL_TEXTURE_2D, 0, 4,image.cols, image.rows, 0, GL_RGB,GL_UNSIGNED_BYTE, image.data);
gluBuild2DMipmaps(GL_TEXTURE_2D, GL_RGB, image.cols, image.rows, GL_RGB, GL_UNSIGNED_BYTE, image.data);
}我用下面的代码展示了结果:
GLvoid Show(void) {
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glEnable(GL_TEXTURE_2D);
// Matrice di proiezione
glMatrixMode (GL_PROJECTION);
glLoadIdentity();
gluOrtho2D(0, WIDTH, HEIGHT, 0);
// Matrice model view
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
...
...
glBindTexture(GL_TEXTURE_2D, textures[1]);
glBegin(GL_QUADS);
glTexCoord2f(0.0f, 0.0f); glVertex2f((GLfloat)((coord[3].x)),(GLfloat)(coord[3].y));
glTexCoord2f(1.0f, 0.0f); glVertex2f((GLfloat)((coord[0].x)),(GLfloat)(coord[0].y));
glTexCoord2f(1.0f, 1.0f); glVertex2f((GLfloat)((coord[1].x)),(GLfloat)(coord[1].y));
glTexCoord2f(0.0f, 1.0f); glVertex2f((GLfloat)((coord[2].x)),(GLfloat)(coord[2].y));
glEnd();
}
glFlush();
glutSwapBuffers();
}在初始化函数中,我写道:
GLvoid Init() {
glGenTextures(2, textures);
glClearColor (0.0, 0.0, 0.0, 0.0);
glEnable (GL_POLYGON_SMOOTH);
glHint (GL_POLYGON_SMOOTH_HINT, GL_DONT_CARE);
glDisable(GL_DEPTH_TEST);
}但它不起作用。
我在Win7 x64上工作,用的是OPenGL 4.0和Glut 3.7。我的显卡是NVidia GeForce gt 630。我还从Nvidia控制面板启用了抗锯齿功能,但什么都没有改变。有人知道怎么帮我吗?
发布于 2013-04-02 21:59:59
首先,我想知道你为什么要使用OpenGL 4.0来处理固定的(不推荐使用的)管道...但让我们来看看你需要的problem.What是MSAA .I我不确定,通过控制面板启用它将总是做trick.Usually它是在代码中完成的。不幸的是,你选择使用GLUT,它没有选项来设置硬件MSAA level.If你想要能够这样做,切换到GLFW.Another选项是手动做,但这意味着你使用自定义FBOs.In这样的情况下,你可以创建FBOs.In与MSAA纹理附件设置MSAA的纹理(也可以应用自定义多重采样算法在碎片着色器如果你愿意)。Here是关于这个主题的一个帖子。
GLFW允许你在window setup.See相关接口上指定MSAA级别。
MSAA确实会降低性能,但降级程度取决于您的硬件,可能还包括OpenGL驱动程序。
发布于 2013-04-03 03:58:59
我解决了我的问题!正如@Michael IV建议的那样,我使用了GLFW insted of GLUT!
为了使用GLFW进行抗锯齿,我使用了下面这行代码:
glfwOpenWindowHint(GLFW_FSAA_SAMPLES,4);
现在效果非常好,如下图所示。

谢谢你的帮忙!
https://stackoverflow.com/questions/15764389
复制相似问题