在QLabel中显示视频

时间:2020-01-15 10:58:47

标签: c++ qt opencv image-processing video-processing

我正在尝试在QT Creator中的QLabet中显示视频。我正在使用openCV阅读视频。这是我的代码:

mainwindow.cpp

#include "includes.h"
#include "vidreadthread.h"


MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);
    VidReadThread *thread1 = new VidReadThread("Video read thread");
    thread1->start();
}

MainWindow::~MainWindow()
{
    delete ui;
}

vidreadthread.cpp

#include "vidreadthread.h"
#include "includes.h"

using namespace cv;
extern MainWindow *mainPtr;

VidReadThread::VidReadThread(QString s) : name(s)
{
}

void VidReadThread::run()
{
    QThread::msleep(100);
    VideoCapture cap;
    cap.open("helicopter_with_stickers.mp4");
    while(1)
    {
        Mat image1;
       // Capture frame-by-frame
        cap >> image1;

       // If the frame is empty, break immediately
       if (image1.empty())
         break;

       QImage image2 = QImage((uchar*) image1.data, image1.cols, image1.rows, image1.step, QImage::Format_RGB888);
       mainPtr->ui->label1->setPixmap(QPixmap::fromImage(image2));
    }
}

我可以显示视频,但无法设置帧频。整个60秒的视频以4-5帧的速度结束。仅使用OpenCV,我可以使用cvWaitkey()来控制帧速率,但是这里msleep()似乎不适用于类似的应用程序。请提出一种无需跳帧的方法。我做了一个vidreadthread,以便在读取视频时不会挂起GUI。

如果还有其他方法可以在我的QT UI中显示OpenCV窗口,那么也建议这样做。

0 个答案:

没有答案
相关问题