Qt环境下利用opencv逐帧播放视频
生活随笔
收集整理的這篇文章主要介紹了
Qt环境下利用opencv逐帧播放视频
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
頭文件
#ifndef MAINWINDOW_H
#define MAINWINDOW_H#include <QMainWindow>
#include <QMainWindow>
#include <opencv2/core/core.hpp>
#include <opencv2/highgui/highgui.hpp>
#include <QTimer>
#include <QDebug>
namespace Ui {
class MainWindow;
}class MainWindow : public QMainWindow
{Q_OBJECTpublic:explicit MainWindow(QWidget *parent = 0);~MainWindow();private:Ui::MainWindow *ui;cv::VideoCapture video;cv::Mat src_frame;QTimer *timer;QImage qimg;
private slots:void getframe();void on_pushButton_clicked();};#endif // MAINWINDOW_H
main.cpp #include "mainwindow.h" #include <QApplication>int main(int argc, char *argv[]) {QApplication a(argc, argv);MainWindow w;w.show();return a.exec(); }
mainwindow.cpp
#include "mainwindow.h" #include "ui_mainwindow.h" #include "iostream" using namespace cv; using namespace std; MainWindow::MainWindow(QWidget *parent) :QMainWindow(parent),ui(new Ui::MainWindow) {ui->setupUi(this);video=cv::VideoCapture("C:\\Users\\Administrator\\Desktop\\code\\video\\video\\video\\1.avi"); }MainWindow::~MainWindow() {delete ui; }void MainWindow::on_pushButton_clicked() {timer = new QTimer(this);connect(timer,SIGNAL(timeout()),this,SLOT(getframe()));timer->start(42);//按照每秒24幀計算,每過42ms執行一次getframe } int k=0; void MainWindow::getframe() {k++;cout<<k<<"get frame"<<endl;video>>src_frame; //從視頻取幀if(!src_frame.data)timer->stop();//如果取不到數據,終止計時器qimg = QImage((const uchar*)src_frame.data,src_frame.cols,src_frame.rows, QImage::Format_RGB888); //簡單地轉換一下為Image對象,rgbSwapped是為了顯示效果色彩好一些。//ui->label->clear();ui->label->setPixmap(QPixmap::fromImage(qimg)); }
main.cpp #include "mainwindow.h" #include <QApplication>int main(int argc, char *argv[]) {QApplication a(argc, argv);MainWindow w;w.show();return a.exec(); }
mainwindow.cpp
#include "mainwindow.h" #include "ui_mainwindow.h" #include "iostream" using namespace cv; using namespace std; MainWindow::MainWindow(QWidget *parent) :QMainWindow(parent),ui(new Ui::MainWindow) {ui->setupUi(this);video=cv::VideoCapture("C:\\Users\\Administrator\\Desktop\\code\\video\\video\\video\\1.avi"); }MainWindow::~MainWindow() {delete ui; }void MainWindow::on_pushButton_clicked() {timer = new QTimer(this);connect(timer,SIGNAL(timeout()),this,SLOT(getframe()));timer->start(42);//按照每秒24幀計算,每過42ms執行一次getframe } int k=0; void MainWindow::getframe() {k++;cout<<k<<"get frame"<<endl;video>>src_frame; //從視頻取幀if(!src_frame.data)timer->stop();//如果取不到數據,終止計時器qimg = QImage((const uchar*)src_frame.data,src_frame.cols,src_frame.rows, QImage::Format_RGB888); //簡單地轉換一下為Image對象,rgbSwapped是為了顯示效果色彩好一些。//ui->label->clear();ui->label->setPixmap(QPixmap::fromImage(qimg)); }
總結
以上是生活随笔為你收集整理的Qt环境下利用opencv逐帧播放视频的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 人力资源管理系统
- 下一篇: 最棒的SpringCloud微服务后台管