一个很好的,简单的视频教程
内容
布雷特本周的选择是视频处理教程,由多产的文件交换作者图像分析.
由于各种原因,我最近花费了大量时间在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命令。
imshow和cdata而不是图像
还有,我真的很喜欢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方法。(关于这些新功能,请您仔细阅读文档。)
评论?
- 类别:
- 选择
评论
要留下评论,请点击在这里登录到您的MathWorks帐户或创建一个新帐户。