在循环中获取单个图像

这个示例展示了如何使用GETSNAPSHOT函数,并提供了一些有效使用的技巧。GETSNAPSHOT函数允许快速获取单个视频帧。

设置获取对象

与图像采集工具箱的大多数交互是通过视频输入对象完成的。这些对象是使用VIDEOINPUT命令创建的。这个例子使用了一个通过工具箱的“winvideo”适配器访问的网络摄像头。

vidobj = videoinput (“winvideo”);

获得一个框架

要获取单个帧,使用GETSNAPSHOT函数。

快照= getsnapshot (vidobj);%在图形窗口中显示该框架。显示亮度图像(快照)

获得多个帧

常见的任务是重复获取单个图像,对其进行处理,然后存储结果。为此,可以在循环中调用GETSNAPSHOT。

快照= getsnapshot(vidobj);显示亮度图像(快照);结束

时间的影响

GETSNAPSHOT函数在被调用时执行大量工作。它必须连接到设备,配置它,开始获取,获取一帧,停止获取,然后关闭设备。这意味着获取一帧的时间比基于相机的帧率预期的时间要长得多。为了说明这一点,在循环中调用GETSNAPSHOT。

测量获取20帧的时间。抽搐快照= getsnapshot(vidobj);结束elapsedTime = toc计算每帧的时间和有效帧率。timePerFrame = elapsedTime/20有效帧率= 1/timePerFrame
过期时间= 21.2434 timePerFrame = 1.0622有效帧率= 0.9415

下一个示例演示了执行循环的更有效的方法。

使用手动触发方式

通过使用videoinput对象的手动触发模式,可以避免前面设置中描述的GETSNAPSHOT开销。手动触发模式允许工具箱在不将数据记录到内存的情况下一次性连接和配置设备。这意味着帧可以以更少的延迟返回到MATLAB®。

%将对象配置为手动触发模式。triggerconfig (vidobj“手动”);%现在设备配置为手动触发,调用启动。%这将导致设备发送数据回MATLAB,但不会记录日志%帧到内存中。开始(vidobj)测量获取20帧的时间。抽搐快照= getsnapshot(vidobj);结束elapsedTime = toc计算每帧的时间和有效帧率。timePerFrame = elapsedTime/20有效帧率= 1/timePerFrame%调用STOP函数来停止设备。停止(vidobj)
运行时间= 1.4811时间帧= 0.0741有效帧率= 13.5031

您可以看到,使用手动触发所花费的时间比上一个示例要小得多。

清理

一旦不再需要视频输入对象,删除相关的变量。

删除(vidobj)