美文网首页
OpenCV在Qt中显示视频的两种方法

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

作者: Caiaolun | 来源:发表于2019-11-06 14:10 被阅读0次

    原文地址: 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(); //发送刷新消息
        }
    }
    

    相关文章

      网友评论

          本文标题:OpenCV在Qt中显示视频的两种方法

          本文链接:https://www.haomeiwen.com/subject/gesubctx.html