首先明确我们的思路,我们现在的思路是读取视频文件然后定时读取并显示视频中的每一帧。(鉴于本人技术力有限目前只想到了这种方法,后续如果对视频成色有更高要求会补充)

读取视频文件

我们先使用QFileDialog中的getOpenFileName函数选择要打开的文件并获取其绝对路径,使用opencv中VideoCapture对象的open方法读取本地视频

const QString dyn = "*.gif;;*.mp4;;*.avi;;*.dat;;*.mkv;;*.flv;;*.vob;;*.3gp";
QString path = QFileDialog::getOpenFileName(this,"打开文件","./", dyn);
cap.open(path.toStdString());

显示视频文件

首先这里先说个坑,我们是绝对不能用waitKey()函数来实现帧与帧之间的时间间隔的,因为我们用的是QLabel来显示,而QLabel是组件,使用waitKey()会使得QLabel数据堵塞,最终实操的结果也只会是过一会后显示视频的最后一帧。

对于这样的情况我们的解决方案是,使用QTimer定时器。
QTimer的主要方法是start(internal)表示每隔internal毫秒发送一个timeout()信号,这样我们只需要编写响应这个信号的槽函数并连接信号和槽函数即可。
连接部分:

QTimer* vedioshow = new QTimer();
//vedioshow是我的QTimer对象
connect(vedioshow, SIGNAL(timeout()), this, SLOT(my_vedioshow()));

槽函数部分:

//这个部分是槽函数,实现读取图像的每一帧并做一定的识别和处理
VideoCapture cap;
void MainWindow::my_vedioshow()
{Mat source, result;cap.read(source);if (source.empty())//如果视频已经读取完成则停止发送timeout()信号{vedioshow->stop();return;}result  = pic_convert(source);//用于处理每一帧图像的函数QImage SImg = Mat2QImage(source);//这个转换函数是需要自己写的QImage RImg = Mat2QImage(result);//InputImg和OutputImg为两个QLabelpic_show(this->ui->InputImg, SImg);//这个显示函数是需要自己写的pic_show(this->ui->OutputImg, RImg);this->ui->InputImg->update();this->ui->OutputImg->update();
}

Qt+Opencv实现本地视频读取及显示相关推荐

  1. OpenCV C++入门,读取和显示一张图片

    文章目录 一.OpenCV C++入门,读取和显示一张图片 二.代码如下 三.类和函数介绍 一.OpenCV C++入门,读取和显示一张图片 OpenCV入门程序,简单显示一张图片. 二.代码如下 # ...

  2. Qt多路视频监控软件(Qt+VLC支持本地视频/RTSP流/RTMP流)

    Qt多路视频监控软件(Qt+VLC支持本地视频/RTSP流/RTMP流) 功能: 支持同时播放多路视频源: 支持播放本地视频,包括MP4.mkv.flv等视频格式: 支持播放RTSP/RTMP视频流: ...

  3. OpenCV(三) 图像的读取和显示

    OpenCV中的C++类和函数都是定义在命名空间cv之内的,有两种方法可以访问. 第一种是,在代码开头的适当位置,加上 usingnamespace cv; 这句. 另外一种是在使用OpenCV类和函 ...

  4. OpenCV学习之视频读取与帧的提取、显示及保存

    OpenCV支持从摄像头或视频文件(AVI)中抓取图像并保存为另一视频文件. 一. 从摄像头获取初始化: CvCapture* capture = cvCaptureFromCAM(0); // ca ...

  5. 基于OpenCV打开本地视频/本地USB摄像头/网络IP摄像头

    前言 最近进行各种测试,总结下! 预备 首先来一张OpenCV关于VideoCapure的介绍,说明很清楚,能够用来读取.avi视频文件,.jpg格式的图片序列,以及网络摄像头. 程序 程序很简单,不 ...

  6. c++获取图像的长宽 opencv_【第一篇:C++与opencv】图片的读取和显示 | 学步园

    这里介绍C++版本的opencv,和C语言版本有些不同,先看代码^_^ [编译环境:opencv2.4.4和VS2008] #include "stdafx.h" #include ...

  7. 【opencv】2.图像读取、显示、输出

    看得见的东西往往使我们更有兴致,从看得见的开始学 [一]头文件和名字空间 你可以直接包含整个opencv的所有文件,也可以按需包含各个模块文件,模块结构的划分可以参考博文:opencv模块结构划分,这 ...

  8. Opencv(C++)笔记--视频读取、视频属性查看、视频循环播放

    目录 1--视频读取代码 2--视频属性查看 3--视频循环播放代码 1--视频读取代码 # include<opencv2/opencv.hpp> # include<cstdio ...

  9. opencv实现多图像读取并显示,sprintf_s函数,static_cast

    基于opencv和C++实现多幅图像的加载,程序中需要将文件统一命名,而且文件名最后一定是数字,还未实现对字符文件名图像的加载. 首先介绍一个函数sprintf_s,sprintf_s是sprintf ...

最新文章

  1. 阿里P7架构师告诉你Java架构师必须知道的 6 大设计原则
  2. 阿里分布式事务框架GTS开源了!
  3. 2018.3.23 13周5次课
  4. python基础语法 第0关print-徐州鼓楼高校邦数据科学通识课【Python基础语法】答案...
  5. shutter 无法设置快捷键的解决方法
  6. COGS 930. [河南省队2012] 找第k小的数 主席树
  7. linux动态库与静态库混合连接
  8. 使用openssl,实现输入和输出都是字符串的类型,注意:输入最好是16的倍数
  9. k8s包管理器helm_K8S 实战(十九)| K8S 包管理 Helm
  10. 2017.4.16 车站 思考记录
  11. Redis安装+启动报错
  12. PHP基础知识之文件加载
  13. 恶意广告活动利用 WebKit 0day 实施欺诈
  14. BGP的community属性
  15. 剑指offer——面试题15:链表中倒数第k个结点
  16. HTML背景透明到桌面,桌面图标背景透明的设置方法
  17. 无所不能的NumPy:我用它弹奏出了CD音质的吉他名曲“爱的罗曼史”
  18. PCB_焊盘工艺设计规范
  19. (二) CGAL库应用:轮廓中轴骨架生成create_interior_straight_skeleton_2()及轮廓的偏置create_offset_polygons_2()
  20. Spring boot 自定义banner的在线制作

热门文章

  1. 医疗AI的“鱿鱼游戏”里,鹰瞳科技凭什么赢?
  2. qpython3 安装库_qpython3安装库的三种方法
  3. 2的N次方是多少位数
  4. VisionMaster4.2.0 联合C#实现相机SDK取图
  5. 计算机 电压保护水平,计算机系统的过电压保护技术及应用
  6. chm“已取消到该网页的导航 ”或者“无法显示网页”的解决
  7. unity google admob ios 接入 聚合激励广告适配器
  8. Lattice CrossLinkNx LIFCL-40应用连载7:使用HyperRAM存储器
  9. 国内首次!3位清华姚班本科生斩获STOC最佳学生论文奖
  10. ios 有很多种cell时的写法 以及 masonry 的使用