如何将OpenCV图像查看窗口推送到带有Visual studio的QT GUI? [英] How to push an OpenCV image viewing window into a QT GUI with Visual studio?

查看:133
本文介绍了如何将OpenCV图像查看窗口推送到带有Visual studio的QT GUI?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我想创建一个带有2个矩形的GUI,用于观看视频(一个显示输入视频,一个显示后处理视频)。

I want to create a GUI with 2 rectangles for viewing videos (one where you see the input video, one where you see the post-processed video).

我想将它集成到一个QT制作的GUI,但我想要这些视频区域填充从OpenCV,作为OpenCV的替代 cv :: nameWindow 方法。

I want it to be integrated into a QT-made GUI, but I want these video areas to be populated from OpenCV, as an alternative to OpenCV's cv::nameWindow method.

我如何做?

推荐答案

您希望做的基本工作流程是:

The basic workflow to do what you desire is:


  1. 使用OpenCV API打开视频(cvCreateFileCapture ,例如)

  2. 从视频抓取IplImage帧(cvQueryFrame)

  3. 将它们转换为QImage(请参阅下面的代码)

  4. 在QLabel(QLabel :: setPixmap和QPixmap :: fromImage)中显示QImage

  5. 循环帧更新(使用QTimer, / li>
  1. Open the video with OpenCV API (cvCreateFileCapture, for example)
  2. Grab IplImage frames from video (cvQueryFrame)
  3. Convert them to QImage (see attached code bellow)
  4. Show QImage on within a QLabel (QLabel::setPixmap and QPixmap::fromImage)
  5. Loop the frame update (using a QTimer, for example, with video framerate)

将IplImage转换为QImage的代码(假设RGB32Bits图片):

Code to convert IplImage to QImage (assuming RGB32Bits images):

QImage *IplImageToQImage(IplImage *input)
{
    if (!input)
        return 0;

    QImage image(input->width, input->height, QImage::Format_RGB32);

    uchar* pBits = image.bits();
    int nBytesPerLine = image.bytesPerLine();

    for (int n = 0; n < input->height; n++)
    {
        for (int m = 0; m < input->width; m++)
        {
            CvScalar s = cvGet2D(input, n, m);
            QRgb value = qRgb((uchar)s.val[2], (uchar)s.val[1], (uchar)s.val[0]);

            uchar* scanLine = pBits + n * nBytesPerLine;
            ((uint*)scanLine)[m] = value;
        }
    }

    return image;
}

上面代码的理解应该很简单。任何疑问只是让我们知道。

The understanding of the code above should be straightforward. Any doubts just let us know.

这个低级别选项允许您在显示之前操纵每个单独的帧。如果您只想通过Qt显示视频,则可以使用 Phonon框架

This "low level" option allows you to manipulate each individual frame before displaying it. If you just want to display a video via Qt, you can use the Phonon framework.

这篇关于如何将OpenCV图像查看窗口推送到带有Visual studio的QT GUI?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆