Cri*_*986 4 c++ opengl opencv texture2d
我想用OpenCV检测一个标记,然后我想用OpenGL将它与图像重叠.第一部分是好的(我完美地实现了检测标记),但我对第二部分有一些问题.
标记是:

和图像是:

但结果如下:

生成图像纹理的代码是:
GLuint *textures = new GLuint[2];
glGenTextures(2, textures);
Mat image = imread("Immagine.png");
glBindTexture(GL_TEXTURE_2D, textures[1]);
glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_NEAREST);
glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_NEAREST);
glTexImage2D(GL_TEXTURE_2D, 0, 4,image.cols, image.rows, 0, GL_RGB,GL_UNSIGNED_BYTE, image.data);
Run Code Online (Sandbox Code Playgroud)
并显示我使用的纹理:
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glEnable(GL_TEXTURE_2D);
glMatrixMode (GL_PROJECTION);
glLoadIdentity();
gluOrtho2D(0, WIDTH, HEIGHT, 0);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
glBindTexture(GL_TEXTURE_2D, textures[1]);
glBegin(GL_QUADS);
glTexCoord2f(0.0f, 0.0f); glVertex2f((GLfloat)(coord[1].x),(GLfloat)(coord[1].y));
glTexCoord2f(1.0f, 0.0f); glVertex2f((GLfloat)(coord[2].x),(GLfloat)(coord[2].y));
glTexCoord2f(1.0f, 1.0f); glVertex2f((GLfloat)(coord[3].x),(GLfloat)(coord[3].y));
glTexCoord2f(0.0f, 1.0f); glVertex2f((GLfloat)(coord[0].x),(GLfloat)(coord[0].y));
glEnd();
Run Code Online (Sandbox Code Playgroud)
我不知道为什么纹理图像是如此奇怪.此外,我使用相同的代码来显示(在opengl窗口上)从网络摄像头捕获的帧,我没有问题.我还注意到,如果我在角落处使用相同的图像没有数字,它可以正常工作(即使它不在标记的相同位置/坐标).
有谁有想法吗?
这是填充/对齐问题.
您正在加载一种格式,该格式对GL具有不同的填充要求(默认情况下,要求将像素行填充为4个字节的倍数).
可能的解决方法是:
glPixelStorei(GL_UNPACK_ALIGNMENT, 1);| 归档时间: |
|
| 查看次数: |
556 次 |
| 最近记录: |