OpenCV在Qt中显示视频的两种方法

2019-11-06  本文已影响0人  Caiaolun

原文地址: https://blog.csdn.net/mjlsuccess/article/details/21696391

mainwindows.h

#include <QtWidgets/QMainWindow>
#include <QPaintEvent>
#include <QTimer>
#include <QPainter>
#include <QPixmap>
#include <QLabel>
#include <QImage>
#include <opencv.hpp>
#include "ui_mainwindow.h"
using namespace cv;
class mainwindow : public QMainWindow
{
    Q_OBJECT
 
public:
    mainwindow(QWidget *parent = 0);
    ~mainwindow();
public slots:
    void updateImage();
private:
 
    QTimer theTimer;
    Mat srcImage;
    VideoCapture videoCap;
    QLabel *imageLabel;
 
    Ui::mainwindowClass ui;
 
protected:
    void paintEvent(QPaintEvent *e);
};

mainwindows.cpp

mainwindow::mainwindow(QWidget *parent)
    : QMainWindow(parent)
{
    ui.setupUi(this);
    connect(&theTimer, &QTimer::timeout, this, &mainwindow::updateImage);
    //从摄像头捕获视频
    if(videoCap.open(0))
    {
        srcImage = Mat::zeros(videoCap.get(CV_CAP_PROP_FRAME_HEIGHT), videoCap.get(CV_CAP_PROP_FRAME_WIDTH), CV_8UC3);
        theTimer.start(33);
    }
    //设置显示视频用的Label
    imageLabel = new QLabel(this);
    ui.verticalLayout->addWidget(imageLabel);
}
 
mainwindow::~mainwindow()
{
    
}
 
void mainwindow::paintEvent(QPaintEvent *e)
{
    //显示方法一
    QPainter painter(this);
    QImage image1 = QImage((uchar*)(srcImage.data), srcImage.cols, srcImage.rows, QImage::Format_RGB888);
    painter.drawImage(QPoint(20,20), image1);
    //显示方法二
    QImage image2 = QImage((uchar*)(srcImage.data), srcImage.cols, srcImage.rows, QImage::Format_RGB888);
    imageLabel->setPixmap(QPixmap::fromImage(image2));
    imageLabel->resize(image2.size());
    imageLabel->show();
}
 
void mainwindow::updateImage()
{
    videoCap>>srcImage;
    if(srcImage.data)
    {
        cvtColor(srcImage, srcImage, CV_BGR2RGB);//Qt中支持的是RGB图像, OpenCV中支持的是BGR
        this->update(); //发送刷新消息
    }
}
上一篇 下一篇

猜你喜欢

热点阅读