OpenGL / Qt - 显示视频

时间:2015-06-23 06:45:40

标签: c++ qt opencv opengl

我正在使用QT创建者,C ++和OpenGL。我想在GUI中显示视频。

因此我正在使用opencvwidget cpp文件。这里的描述

  

/ ** *使用OpenCV和Windows捕获帧或单个图像的小部件   使用OpenGL显示它们。 * *本课程集成了OpenCV和Qt。   它是一个可以添加到您的GUI的小部件,它可以处理这两个小部件   捕获和显示视频和单个*图像。 * * 班级   使用双缓冲系统实现:一个cv :: Mat拥有最多   *最近捕获的图像(以下称为捕获图像),另一个保存当前正在窗口小部件中显示的图像*   (显示图像)。这允许你*执行处理   在显示之前捕获图像,首先调用* getImage(),然后   altring它,最后调用updateDisplay()。如果你只是想*   立即显示,启用自动显示(使用   enableAutoDisplay())。 * /

当我阅读视频时,显示屏出现问题。的确,我的照片像这样扭曲: enter image description here

如果我使用其他视频,图像是正确的。我尝试了几个小时,以了解为什么显示不正确,我仍然没有找到解决方案。

我认为问题来自于纹理的应用:

void OpenCVWidget::paintGL()
{
    if(displayImage.empty()) {
        displayImage = Mat::zeros(1, 1, CV_8UC3); // Paint a black background until we have something to show.
    }

    qglClearColor(Qt::black); // Create a nice, black background for the parts of the widget with no image.
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);

    glLoadIdentity();

    glVertexPointer(2, GL_FLOAT, 0, vertices.constData());
    glTexCoordPointer(2, GL_FLOAT, 0, texCoords.constData());
    glEnableClientState(GL_VERTEX_ARRAY);
    glEnableClientState(GL_TEXTURE_COORD_ARRAY);




    // Non-mipmap way of mapping the texture (fast and clean):
    glGenTextures(1, &texture); // Allocate a texture name.
    glBindTexture(GL_TEXTURE_2D, texture); // Select our current texture.
    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); // When the texture area is larger then the image, upscale using linear interpolation.
    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); // When the texture area is smaller than the image, downsample using linear interpolation.

    glTexImage2D(GL_TEXTURE_2D, 0, 3, displayImage.cols, displayImage.rows, 0, GL_BGR, GL_UNSIGNED_BYTE, displayImage.data);

    // End of different methods, the last few lines are common for all methods.

    glDrawArrays(GL_TRIANGLE_FAN, 0, 4); // Draw it!

    glDeleteTextures(1, &texture);

}

我想知道这不是频道或类似的问题,但我不知道。

如果有人已经处理过这类问题,请帮助我。

非常感谢。

0 个答案:

没有答案