Я пытаюсь отобразить видео в QLabet в QT Creator. Я читаю видео с помощью openCV. Вот мой код:
основное окно. 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));
}
}
Я могу отобразить видео, но я не могу ' t установить частоту кадров. Целое 60se c видео переходит в 4-5 кадров. Только с OpenCV у меня есть команда на частоту кадров с cvWaitkey()
, но здесь msleep()
, похоже, не работает для аналогичного приложения. Пожалуйста, предложите способ сделать это без пропуска кадров. Я сделал vidreadthread
, чтобы GUI не зависал во время чтения видео.
Если есть какой-либо другой способ, которым я могу отображать окно OpenCV внутри моего QT UI, тогда, пожалуйста, порекомендуйте а также.