博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Qt + VS2013利用Opencv实现视频播放器功能
阅读量:2090 次
发布时间:2019-04-29

本文共 2396 字,大约阅读时间需要 7 分钟。

功能实现:

1.弹窗,手动选择打开视频文件;

2.视频播放,
3.视频播放暂停,继续播放
4.快进;
5.截图
demo下载:

头文件包含:

#include 
#include
#include
#include

UI显示

打开视频文件后:

在这里插入图片描述

代码实现:

打开视频文件
// 打开视频文件void tVideoCapture::on_btnOpen_clicked(){
QString deftPath = "E:/OfficeVideos_hiv2018", deftSuffic = "Videos(*.avi *.mp4 *.wmv);;Films(*.mkv *.rmvb *.mpeg);;Alls(*.*)"; QString VideoName = QFileDialog::getOpenFileName(nullptr, "Open-Video", deftPath, deftSuffic); if (VideoName.isEmpty()) return; mLabel1->setText(VideoName); vc = new VideoCapture; String cStr(VideoName.toStdString()); vc->open(cStr); QString str; if (vc->isOpened()) {
str = QString::fromLocal8Bit("视频读取成功!"); } else {
str = QString::fromLocal8Bit("视频读取失败!"); qDebug() << str; return; } qDebug() << str; double Ratio = vc->get(CV_CAP_PROP_FPS),//帧率 wid = vc->get(CV_CAP_PROP_FRAME_WIDTH),//每帧图像宽度 heit = vc->get(CV_CAP_PROP_FRAME_HEIGHT);//每帧图像高度 int cnt = 0; cnt = vc->get(cv::CAP_PROP_FRAME_COUNT);//帧数 qDebug() << "Ratio: " << Ratio << "Width: " << wid << "Height: " << heit << "count: " << cnt; Mat fm; if (vc->read(fm)) {
mInter->sendVideoName(fm); }}

播放

// 播放void tVideoCapture::on_btnRun_clicked(){
if (ui.btnRun->text() == QString::fromLocal8Bit("播放")) {
ui.btnRun->setText(QString::fromLocal8Bit("暂停")); mLabel2->setText(QString::fromLocal8Bit("正常播放!")); mTimer->start(); } else {
ui.btnRun->setText(QString::fromLocal8Bit("播放")); mTimer->stop(); mRunFast = false; mLabel2->setText(QString::fromLocal8Bit("暂停播放!")); }}

快进

// 快进void tVideoCapture::on_btnFast_clicked(){
if (ui.btnFast->text() == QString::fromLocal8Bit("快进")) {
ui.btnFast->setText(QString::fromLocal8Bit("停止快进")); mRunFast = true; mLabel2->setText(QString::fromLocal8Bit("快进播放!")); } else {
ui.btnFast->setText(QString::fromLocal8Bit("快进")); mRunFast = false; mLabel2->setText(QString::fromLocal8Bit("正常播放!")); } }

截图

// 截图void tVideoCapture::on_btnGrab_clicked(){
mTimer->stop(); mRunFast = false; mLabel2->setText(QString::fromLocal8Bit("暂停播放!")); ui.btnRun->setText(QString::fromLocal8Bit("播放")); QString deftPath = "", deftSuffic = "Imgs(*.jpg *.bmp *.png *.tiff);;Alls(*.*)"; QString SavePth = QFileDialog::getSaveFileName(nullptr, "Save-Images", deftPath, deftSuffic); if (SavePth.isEmpty()) return; Mat fm; if (vc->read(fm)) {
imwrite(SavePth.toStdString(), fm); }}

代码截图

在这里插入图片描述

demo源代码下载

转载地址:http://himqf.baihongyu.com/

你可能感兴趣的文章
volatile在JVM内存交互中的操作
查看>>
实现一个具有Stream的链式、惰性特点的容器
查看>>
Spark源码编译
查看>>
分布式一致性算法(Paxos、Raft、ZAB)
查看>>
MPC多方安全计算——比较算法示意
查看>>
Akka事件驱动——模拟Spark注册、心跳
查看>>
Flink示例——Source
查看>>
Flink示例——Sink
查看>>
Flink示例——Connect、CoMapFunction、Split、Select
查看>>
Flink示例——Window、EventTime、WaterMark
查看>>
Flink示例——State、Checkpoint、Savepoint
查看>>
Flink示例——Table、SQL
查看>>
HBase之Rowkey设计
查看>>
推荐算法——ALS模型算法分析、LFM算法
查看>>
Spark源码剖析——RpcEndpoint、RpcEnv
查看>>
Spark源码剖析——Master、Worker启动流程
查看>>
TensorFlow2 学习——MLP图像分类
查看>>
TensorFlow2 学习——CNN图像分类
查看>>
Spark源码剖析——SparkSubmit提交流程
查看>>
TensorFlow2 学习——RNN生成古诗词
查看>>