Отображение видео в QLabel - PullRequest
       10

Отображение видео в QLabel

0 голосов
/ 15 января 2020

Я пытаюсь отобразить видео в 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, тогда, пожалуйста, порекомендуйте а также.

...