主要内容

在循环中获取单个图像

这个例子展示了如何使用GETSNAPSHOT函数。GETSNAPSHOT功能允许快速获取单个视频帧。

设置获取对象

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

vidobj = videoinput (“winvideo”);

获得一个框架

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

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

获得多个帧

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

I = 1:5 snapshot = getsnapshot(vidobj);显示亮度图像(快照);结束

时间的影响

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

%测量获取20帧的时间。抽搐I = 1:20 snapshot = getsnapshot(vidobj);结束elapsedTime = toc计算每帧的时间和有效帧率。timePerFrame = elapsedTime/20 effecveframerate = 1/timePerFrame
elapsedTime = 21.2434 timePerFrame = 1.0622 effecveframerate = 0.9415

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

使用手动触发模式

通过使用视频输入对象的手动触发模式,可以避免前面设置中描述的GETSNAPSHOT的开销。手动触发模式允许工具箱一次连接并配置设备,而无需将数据记录到内存中。这意味着帧可以以更少的延迟返回到MATLAB®。

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

您可以看到,使用手动触发的运行时间比前面的示例小得多。

清理

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

删除(vidobj)