我正在尝试在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窗口,那么也建议这样做。