Qt-OpenCV学习笔记--读取视频--VideoCapture()

目录

一、概述

二、函数构造

三、函数方法

四、测试代码

第一种方法

测试代码1

测试结果1

第二种方法

测试代码2

测试结果2

五、参考


一、概述

这个函数用来从本地文件或摄像头设备中读取视频。

二、函数构造

这个函数有多种重载,主要介绍常用的三种:

VideoCapture::VideoCapture();
VideoCapture::VideoCapture(const string &filename);
VideoCapture::VideoCapture(int device);
filename表示视频文件的路径及名称
device要打开的视频捕获设备的id。要使用默认后端打开默认相机,只需传递0。

三、函数方法

函数方法
VideoCapture::open打开视频文件或视频获取装置
VideoCapture::isOpened判断视频文件是否正确,返回true则正确
VideoCapture::release关闭视频流文件
VideoCapture::grab抓住下一帧的视频文件或捕获设备
VideoCapture::retrieve解码并返回了视频帧
VideoCapture::read抓住,解码并返回下一个视频帧
VideoCapture::get返回指定视频类的相关参数信息
VideoCapture::set设置类信息的一个属性

  opertor>>方法利用函数重载提取单帧图像image,read方法的输入是Mat的引用,这种方式得到的实际是VideoCapture解析得到的单帧图像的引用,当后续再读取帧时,Mat数据将会自动释放,自动更新成新的数据信息。Mat复制构造函数和赋值操作共享数据空间,当需要同时获取多帧图像源时,可以利用Mat提供的Mat::clone()方法进行复制操作。

四、测试代码

第一种方法

测试代码1

#include "widget.h"
#include "ui_widget.h"

#include <QDebug>

#include <opencv2/core/core.hpp>
#include <opencv2/highgui/highgui.hpp>
#include <opencv2/imgproc/imgproc.hpp>

#include <vector>

using namespace cv;
using namespace std;

Widget::Widget(QWidget *parent)
    : QWidget(parent)
    , ui(new Ui::Widget)
{
    ui->setupUi(this);

    //载入视频路径
    VideoCapture capture("c:/opencv/cup.mp4");

    //播放标记
    int i=0;

    //循环读取
    while (1)
    {
        //新建图像
        Mat frame;

        //读取当前帧(再次读取时,Mat自动释放,获取下一帧图像)
        capture>>frame;

        //进度显示
        qDebug()<<"播放"<<i;
        i++;

        //播放完毕,跳出循环
        if(frame.empty())
        {
            qDebug()<<"播放完毕!";
            break;
        }

        //图像显示
        imshow("frame",frame);

        //延时50毫秒,读取下一帧视频(延时越小,播放速度越快;反之,越慢)
        waitKey(50);
    }

}

Widget::~Widget()
{
    delete ui;
}

测试结果1

第二种方法

测试代码2

#include "widget.h"
#include "ui_widget.h"

#include <QDebug>

#include <opencv2/core/core.hpp>
#include <opencv2/highgui/highgui.hpp>
#include <opencv2/imgproc/imgproc.hpp>

#include <vector>

using namespace cv;
using namespace std;

Widget::Widget(QWidget *parent)
    : QWidget(parent)
    , ui(new Ui::Widget)
{
    ui->setupUi(this);    

    //实例对象;
    VideoCapture capture;
    //载入图像;
    capture.open("c:/opencv/cup.mp4");

    //判断是否载入成功,否则跳出
    if(!capture.isOpened())
    {
        qDebug()<<"视频打开失败!";
        return;
    }

    //创建矩阵
    Mat frame;

    //循环读取,读取完毕,自动结束
    while(capture.read(frame))
    {
        //显示
        imshow("frame",frame);

        //延时50毫米,读取下一帧
        waitKey(50);
    }

}

Widget::~Widget()
{
    delete ui;
}

测试结果2

五、参考

 opencv图像处理学习(六十九)——VideoCapture类

OpenCv 之 VideoCapture的使用

opencv——waitKey函数

  • 0
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值