本周文件交换精选

我们最好的用户提交

一个很好的,简单的视频教程

内容

布雷特本周的选择是视频处理教程,由多产的文件交换作者图像分析

由于各种原因,我最近花费了大量时间在MATLAB中处理视频——无论是帮助客户克服一些挑战,还是开发用于检测、跟踪和标记单个帧中感兴趣的区域的新工具。开始视频分析可能会有点令人生畏——有几个选项会让新用户感到困惑,而且很容易在途中走错路。

我特别喜欢Image Analyst的教程,因为它是“视频处理的一个很好的开始。”这说明初学者入门是多么容易。伟大的工作!”

本教程恰到好处地展示了视频回放,并演示了如何结合一个简单的帧处理算法。Image Analyst使用图像处理工具箱附带的演示视频('rhinos.avi')演示如何:

  • 提取目标视频的文件夹信息:
文件夹= fileparts ((' rhinos.avi '));
  • 从该目录中选择一个视频:
movieFullFileName = fullfile(文件夹,“rhinos.avi”);
  • 创建一个视频阅读器:
videoObject = VideoReader (movieFullFileName)
  • 用它来读取和显示帧。(我在这里展示了稍加修改的代码):
字形大小= 12;numberOfFrames = videoObject.NumberOfFrames;frame = 1: numberOfFrames thisFrame = read(视频对象,帧);图像(thisFrame);标题= sprintf ('帧%4d的%d。'帧,numberOfFrames);标题(标题,“字形大小”、字形大小);结束

还有更多…Image Analyst向用户展示了如何计算和绘制帧的实时统计数据,以及在读取/显示过程中执行一些基本的图像分析,以及在视频播放时可视化结果:

可以选择的是,提示您将单个帧作为图像写入目录,并收回它们以进行后续回放。非常有用的东西!

我有一些建议可供参考:

基于时间的帧读取

Image Analyst的视频播放器使用“基于帧的”阅读。在R2014b中,我们引入了“基于时间的”帧读取,这可以更有效。要修改代码以使用基于时间的读取,请考虑注释掉对videoObject。NumberOfFrames.(这会触发基于框架的阅读,如果你随后尝试使用基于时间的模式阅读,就会导致错误。)相反,您可以使用numberOfFrames =圆(videoObject。帧速率* videoObject.Duration);,如果你需要的话。

然后,而不是

帧= 1:numberOfFrames

你可以用循环:

hasFrame (videoObject)

和一个新的readFrame命令。

imshowcdata而不是图像

还有,我真的很喜欢imshow用于显示图像。它识别输入矩阵为图像,并保持长宽比。(图像-显示的图像可以拉伸。)它还自动抑制轴标记,并具有其他一些良好的行为。此外,一旦您创建了一个“图像对象”,您就可以通过修改对象的“CData”来很容易地重用它。没有必要创建一个新的图像,每帧读取:

所以…

videoObject = VideoReader (movieFullFileName);帧= readFrame (videoObject);img = imshow(框架);hasFrame(videoObject) thisFrame = readFrame(videoObject);img。CData = thisFrame;标题= sprintf ('帧%4d的%d。'...圆(videoObject.CurrentTime * videoObject.FrameRate), numberOfFrames);标题(标题,“字形大小”、字形大小);结束

最后:

图像分析师使用结构体来存储帧信息。新“图像数据存储”功能(在R2015b中引入)方便了对单个图像的引用和可视化。(Image Analyst展示了如何从提取的帧创建一个新的视频,但你也可以只是在循环中显示它们,使用readimage方法。(关于这些新功能,请您仔细阅读文档。)

评论?

评论反馈总是受欢迎的!让我们知道你的想法。




发布与MATLAB®R2015b

|
  • 打印
  • 发送电子邮件

评论

要留下评论,请点击在这里登录到您的MathWorks帐户或创建一个新帐户。