视频截图如下


使用一个单独的线程处理和显示视频源的输入帧和输出帧,有助于使GUI线程(主线程)保持空闲及可响应性,而用第二线程处理更密集的进程。
准备工作:
创建含两个label的QT控件应用程序,并在.pro文件中配置opencv:
INCLUDEPATH += /usr/local/include \
/usr/local/include/opencv \
/usr/local/include/opencv2
LIBS += /usr/local/lib64/libopencv*
第一种方法(官方已不推荐的老方法):子类化QThread。 思路如下:
一,创建类继承Qthread: class videoProcessorThread : public QThread
重写run函数,作为新线程入口。run函数中1打开视频,2设定时时器延时读取视频帧,3给主框架发送显示帧图片消息,4加上this->exec();支持信号槽。
二,主框架MainWindow的构造函数中,1建立显示图片的信号槽连接,2启动线程。析构函数中3结束线程。
代码如下:
videoprocessorthread.h
#ifndef VIDEOPROCESSORTHREAD_H
#define VIDEOPROCESSORTHREAD_H
#include <QObject>
#include <QThread>
#include <QPixmap>
#include <opencv2/opencv.hpp>
using namespace cv;
class videoProcessorThread : public QThread
{
Q_OBJECT
public:
explicit videoProcessorThread(QObject *parent = nullptr);
void showCamera();
void stopVideo();
signals:
void inDisplay(QPixmap pixmap);
void outDisplay(QPixmap pixmap);
public slots:
private:
void run() o

本文介绍了如何在QT应用中利用QThread和QObject的movetothread方法实现多线程播放OpenCV视频,以保持GUI线程的响应性。首先,详细阐述了两种方法的实现思路:一是子类化QThread并重写run函数,二是使用QObject的movetothread。接着,提供了相关代码示例,包括线程类的定义、主框架中的信号槽连接以及线程的启动与结束处理。
最低0.47元/天 解锁文章
2135





