gpt4 book ai didi

c++ - 使用 OpenGL 在 Qt 中显示来自 DirectShow 的原始图像数据

转载 作者:太空宇宙 更新时间:2023-11-04 11:33:35 26 4
gpt4 key购买 nike

我正在从 DirectShow 设备捕获相机帧并有一个回调函数,该函数将原始图像字节放入缓冲区并将其交给小部件。

这个小部件应该是一个包含实时图像的 QtOpenGL 小部件。 (它应该在 OpenGL 或其他快速方法中呈现)

有没有办法用 QGLWidget 或其他类型(如 QSurface)显示原始图像数据?我发现并尝试使用的所有示例都使用了我无法使用的命令(如 glBegin),因为我使用的是带有 ANGLE 的 Qt 5.1 版本。

至少我能够在带有 QImage 的 QLabel 中显示图像(它是颠倒的,但那只是首先尝试查看缓冲区和回调函数是否有效)。

最佳答案

要在 QLabel 中显示图像(不是颠倒的):

ui->imageLabel->setPixmap(QPixmap::fromImage(img.mirrored(false, true)));

这里的问题是您拥有 Qt 不期望的 GL/Windows 格式的图像。 Qt 需要 X11 格式,即 180° 旋转的 GL 图像。

但您也可以继续使用 QGLWidget,在其中绘制一个正方形并将图像作为纹理映射到其上。

它如何在 QGLWidget 中用于 OpenGL:

GLuint texture;
glEnable(GL_TEXTURE_2D);
glBindTexture(GL_TEXTURE_2D, texture);
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, width, height, 0, GL_RGB, GL_UNSIGNED_BYTE, image_buffer);
glMatrixMode(GL_MODELVIEW);
glPushMatrix();
glColor3f(1.0, 1.0, 1.0);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
glBegin(GL_TRIANGLE_STRIP);
glTexCoord2f(0, 0);
glVertex2f(-1, -1);
glTexCoord2f(1, 0);
glVertex2f(1, -1);
glTexCoord2f(0, 1);
glVertex2f(-1, 1);
glTexCoord2f(1, 1);
glVertex2f(1, 1);
glEnd();
glPopMatrix();

关于c++ - 使用 OpenGL 在 Qt 中显示来自 DirectShow 的原始图像数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23653709/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com