从指定时间或帧索引开始读取帧

从距离视频文件开头 0.5 秒处开始读取文件的一部分。然后,从帧索引 100 开始读取到视频文件结束。

构造一个与样本文件 'xylophone.mp4' 关联的 VideoReader 对象。

vidObj = VideoReader('xylophone.mp4');

通过设置 CurrentTime 属性,指定应从距离文件开头 0.5 秒处开始读取。

vidObj.CurrentTime = 0.5;

使用 readFrame 方法读取视频帧,直至到达文件结束。

while hasFrame(vidObj)

vidFrame = readFrame(vidObj);

imshow(vidFrame)

pause(1/vidObj.FrameRate);

end

您也可以使用 read 方法从指定的帧索引开始读取视频帧,直到视频结束。将要读取的索引指定为 [100 Inf]。read 方法返回从索引 100 开始到视频文件结束的所有帧。

vidframes = read(vidObj,[100 Inf]);

读取指定区间内的帧

通过指定时间或帧区间来读取视频文件的一部分。

读取 0.6 到 0.9 秒之间的视频帧。首先,创建一个视频读取器对象和一个用来保存帧的结构体数组。

vidObj = VideoReader('xylophone.mp4');

s = struct('cdata',zeros(vidObj.Height,vidObj.Width,3,'uint8'),'colormap',[]);

然后,通过设置 CurrentTime 属性,指定应从距离文件开头 0.6 秒处开始读取。

vidObj.CurrentTime = 0.6;

一次读取一帧,直至 CurrentTime 到达 0.9 秒处。将每个视频帧中的数据追加到结构体数组。查看结构体数组中的帧数。s 是 1×10 结构体,表示读取了 10 个帧。有关将结构体 s 中的帧显示为影片的信息,请参阅 movie 函数参考页。

k = 1;

while vidObj.CurrentTime <= 0.9

s(k).cdata = readFrame(vidObj);

k = k+1;

end

whos s

Name Size Bytes Class Attributes

s 1x10 2305344 struct

您也可以通过使用帧索引来读取指定区间内的所有帧。例如,将 read 的第二个参数指定为 [18 27]。read 方法返回 FrameSize×10 数组,表示读取了 10 个帧。

frames = read(vidObj,[18 27]);

whos frames

Name Size Bytes Class Attributes

frames 240x320x3x10 2304000 uint8

读取所有帧

从视频中读取所有帧,一次读取一帧或一次读取所有帧。

创建一个视频读取器对象,并显示视频中的总帧数。

vidObj = VideoReader('xylophone.mp4');

vidObj.NumFrames

ans = 141

使用 readFrame 方法读取所有帧,一次读取一帧,并显示这些帧。

while hasFrame(vidObj)

frame = readFrame(vidObj);

imshow(frame)

pause(1/vidObj.FrameRate);

end

您也可以一次读取所有视频帧。read 方法返回由视频帧组成的 FrameSize×141 数组。

allFrames = read(vidObj);

whos allFrames

Name Size Bytes Class Attributes

allFrames 240x320x3x141 32486400 uint8

视频读取的故障排除和提示

当 CurrentTime 属性的值等于 Duration 属性的值时,hasFrame 方法可能会返回逻辑值 1 (true)。这是由于所使用的基础 API 的局限性所致。

不推荐通过将 CurrentTime 属性设置为接近于 Duration 值的值来查找视频文件中的最后一帧。对于某些文件,即使 CurrentTime 值小于 Duration 值,该操作也会返回错误,即指示已到达文件结尾。如果文件持续时间长于视频流的持续时间,并且在靠近文件结尾时没有可读取的视频,通常会发生此情况。

不推荐使用 Duration 属性限制从视频文件中读取数据。请使用 hasFrame 方法检查是否存在可读取的帧。最好是连续读取数据,直至文件报告不再存在可读取的帧。

Windows® 系统上的视频读取性能:为了在 Windows 上达到更好的 MP4 和 MOV 视频文件读取性能,MATLAB® 使用系统的图形硬件进行解码。但是,在某些情况下,使用图形卡进行解码可能会降低系统性能,具体取决于系统上的特定图形硬件。如果您注意到系统上的视频读取性能降低,可以通过键入以下命令来禁用硬件加速:matlab.video.read.UseHardwareAcceleration('off')。您可以通过键入以下命令重新启用硬件加速:matlab.video.read.UseHardwareAcceleration('on')。

matlab中读取视频的命令,读取视频文件 - MATLAB Simulink - MathWorks 中国相关推荐

  1. matlab 图中的legend,matlab中legend加图示命令的使用

    matlab中legend什么意思 matlab中的legend是图例的意思. legend()使用格式:legend(string1,string2,string3, ...,n) string1- ...

  2. matlab中怎样求峭度,【转】Matlab常用函数~

    计算样本的百份位数 Matlab的常用内部数学函数 指数函数 exp(x) 以e为底数 对数函数 log(x) 自然对数,即以e为底数的对数 log10(x) 常用对数,即以10为底数的对数 log2 ...

  3. matlab 日期排序_在Matlab中对数据进行排序(Sorting Data in Matlab)

    在Matlab中对数据进行排序(Sorting Data in Matlab) 我试图在Matlab中对以下数据进行排序,但没有得到我需要的预期输出. 这是数据: '1B-3A-5A' '1A-3A- ...

  4. Matlab中对于矩阵数据的读取顺序(即矩阵的维度顺序)

    Matlab中的维度顺序: 对于二维矩阵,第一维度是Y维度(即矩阵的列方向),第二维度是X维度(即矩阵的行方向): 对于三维矩阵,第一维度是Y维度(矩阵的列方向),第二维度是X维度(矩阵的行方向),第 ...

  5. matlab中 三种方法计算 Ax b,在MATLAB中,方程Ax=B的解可以用哪个命令求得? matlab 求助 解方程组...

    matlab中解方程组还是很方便的,例如,对于代数方程组Ax=b(A为系数矩阵,非奇异)的求解,MATLAB中有两种方法: (1)x=inv(A)*b - 采用求逆运算解方程组: (2)x=A\B - ...

  6. matlab中if语句多个_科学计算 | MATLAB程序设计基础

    点击"蓝字"关注我们 科学计算 | MATLAB程序设计基础 引言 在前面的学习中,我们都是在命令行窗口逐条输入命令,然后由matlab解释执行,这种交互式的命令执行方式,操作简单 ...

  7. 矩阵在Matlab中应用规则,1.3 MATLAB中的矩阵运算免费阅读_详解MATLAB在最优化计算中的应用免费全文_百度阅读...

    4.6 线性规划问题的MATLAB求解方法 与一般的线性规划理论一样,在MATLAB中有线性规划的标准型,和前面介绍的一般标准型有类似之处,也有不同之处.在调用MATLAB线性规划函数linprog时 ...

  8. 在matlab中如何打开示例程序,visual studio 调用 matlab实例

    续接上篇,本文将对如何通过visual studio调用matlab画图做出指导, 并给出实例. 代码部分: 首先在头文件补充engine #include"engine.h" 然 ...

  9. matlab中p是什意思,如下的用matlab进行编程的勒让德函数,求解释,看不懂什么意思。如:p和t分别代表什么?p(1,:)是什么意思...

    答:找本数学物理方法的书,弄好两件事: 1.勒让德函数与缔合勒让德函数,MATLAB的legendre函数是后者. 2.顺便找一下勒让德函数的递推公式. 我刚才粗看了一下,可能P(2,:),t(2,: ...

  10. matlab中10的负几次方怎么表示,matlab中e负2次方 数学中2e-01T表示什么含义,如何在MATLAB中实现?...

    数学中2e-01T表示什么含义,如何在MATLAB中实现? 这个简单啊,就是E是弹模,v是泊松比,2.63e-2指的是2.63乘以10的-2次方,T估计指的是温度吧 请问matlab里面exp函数怎么 ...

最新文章

  1. 多线程并行和并发的区别
  2. ELK 性能优化实践
  3. 其实你做的大部分工作都是浪费
  4. JDBC编程的事务处理
  5. 第三届“SLAM技术及应用”暑期学校视频分享(完整版)
  6. LeetCode--85.最大矩形(单调栈)
  7. 《天天数学》连载14:一月十四日
  8. python描述符详解_Python描述符 (descriptor) 详解
  9. linux多线程学习(三)——线程属性设置
  10. Moodle中的角色与权限控制
  11. grafana的前端技术_Grafana开发环境搭建
  12. 网络管理与维护作业7
  13. 以太网安全技术ACL原理+配置
  14. [歌词]《一花依世界》《君がいる世界へ》歌词假名罗马音
  15. 计算机硬件系统基本的工作原理是,硬件系统基本组成及工作原理
  16. linux火狐中设置中文,Ubuntu火狐浏览器如何改为中文菜单
  17. Mybatis之Mapper代理开发方式
  18. CCF认证2019031-小中大
  19. android otg连接单反
  20. c语言输入f1到f11,同花顺功能键f1到f11,谁能告诉我F1到F10各键的功能?

热门文章

  1. 计算机专业考研的好学校排名2015,计算机类专业考研最好的学校排名
  2. 【NOIP2018模拟赛2018.8.28】video
  3. Ajax:拥抱JSON,让XML走开
  4. 天嵌通途B210和USRP B210性能对比实验
  5. 【虚幻4】UMG组件的简介与使用(Common 常用组件篇)
  6. 对象存储(云存储)概述
  7. Golang开发定时钉钉小机器人(基于gin+gorm)
  8. [微信]微信小程序开发--用户昵称中带有emoji表情的处理方法
  9. 面向金融的R语言_L3
  10. Elephant Swap的LaaS方案迅速崛起,构建全新DeFi2.0协议