使用事件回调的强大之处在于您可以在响应事件时执行处理。您可以决定要将回调与哪些事件关联,以及这些回调执行哪些函数。
本节
请注意
如果回调涉及cpu密集型任务(如更新图形),则回调函数的执行可能会延迟。
的回调函数TimerFcn
,FramesAcquiredFcn
,StartFcn
,StopFcn
,TriggerFcn
,ErrorFcn
回调。
回调函数至少需要两个输入参数:
图像采集对象
与事件关联的事件结构
这个回调函数的函数头说明了这个基本语法。
函数mycallback (obj、事件)
第一个参数,obj
,是图像采集对象本身。因为对象是可用的,所以您可以在回调函数中使用任何工具箱函数,例如getdata
,它要求对象作为参数。您还可以访问所有对象属性。
第二个参数,事件
,是与事件相关联的事件结构。此事件信息仅属于导致回调函数执行的事件。有关受支持的事件类型及其关联的事件结构的完整列金宝app表,请参见事件结构.
除了这两个必需的输入参数外,您还可以为回调函数指定额外的、特定于应用程序的参数。
请注意
要接收对象和事件参数以及任何其他参数,在指定函数名作为回调属性的值时必须使用单元格数组。有关更多信息,请参见指定回调函数.
为了说明这一点,这个例子实现了一个用于帧获取事件的回调函数。这个回调函数使您能够通过定期查看示例帧来监视正在获取的帧。
为了实现这个函数,回调函数获取一帧数据,并在MATLAB中显示所获取的帧®图窗口。该函数还访问作为参数传递的事件结构,以显示所显示帧的时间戳。的drawnow
命令在回调函数中强制MATLAB更新显示。
函数display_frame(obj,事件)sample_frame = peekdata(obj,1);显示亮度图像(sample_frame);drawnow;abtime = event. data . abtime;t =修复(abstime);sprintf (' % s % d: % d: % d ',“时间戳”,t (4), (5), t (6))
要了解如何使用这个函数作为回调,请参见查看样本框架.
通过设置事件的回调属性的值,可以将回调函数与特定的事件关联起来。视频输入对象支持所有类型的事件的回调属性。金宝app
你可以通过以下三种方式指定callback函数作为属性的值:
下面几节提供关于这些选项的更多信息。
请注意
要访问传递给回调函数的对象或事件结构,必须将函数指定为单元格数组或函数句柄。
您可以将回调函数指定为字符向量。例如,这段代码指定了回调函数mycallback
作为启动事件回调属性的值StartFcn
用于视频输入对象从视频
.
从视频。StartFcn =“mycallback”;
在这种情况下,回调是在MATLAB工作空间中计算的。
您可以将回调函数指定为单元格数组中的字符向量。
例如,这段代码指定了回调函数mycallback
作为启动事件回调属性的值StartFcn
用于视频输入对象从视频
.
从视频。StartFcn = {' mycallback '};
要指定附加参数,请将它们作为单元格数组中的附加元素包含。
时间= datestr (0);从视频。StartFcn = {mycallback,时间};
传递给回调函数的前两个参数仍然是视频输入对象(obj
)和事件结构(事件
).在这两个论点之后还有其他论点。
您可以将回调函数指定为函数句柄。
例如,这段代码指定了回调函数mycallback
作为启动事件回调属性的值StartFcn
用于视频输入对象从视频
.
从视频。StartFcn = @mycallback;
要指定其他参数,请将函数句柄和参数作为单元格数组中的元素包含。
时间= datestr (0);从视频。StartFcn = {@mycallback,时间};
如果你在MATLAB文件中执行一个本地回调函数,你必须指定回调作为一个函数句柄。
除了指定自己创建的回调函数外,还可以指定开始
,停止
,或触发
工具箱函数作为回调函数。例如,这段代码将停止事件回调的值设置为Image Acquisition Toolbox™开始
函数。
从视频。StopFcn = @start;
如果在执行回调函数时发生错误,工具箱将禁用回调并显示类似如下的消息。
开始(vid) ? ?错误使用==> frames_cb输入参数太多。警告:FramesAcquiredFcn回调被禁用。
若要启用已禁用的回调,请设置与该回调关联的属性的值或重新启动该对象。
这个例子创建了一个视频输入对象,并将获取的帧事件回调函数属性设置为display_frame
中创建的函数,编写回调函数.
这个例子设置了TriggerRepeat
属性的对象为4,以便获得50帧。在运行时,该示例在每次获得五帧数据时显示采集数据的一个样本帧。
创建一个图像采集对象-这个例子为矩阵创建一个视频输入对象®图像采集设备。要在您的系统上运行此示例,请使用imaqhwinfo
函数获取图像采集设备的对象构造函数,并将该语法替换为以下代码。
Vid = videoinput(' matrix ', 1);
配置属性值——这示例设置FramesPerTrigger
值为30TriggerRepeat
性质4。的值也指定为FramesAcquiredFcn
回调事件回调函数display_frame
中创建的,编写回调函数.对象将执行FramesAcquiredFcn
的值指定每五帧FramesAcquiredFcnCount
财产。
从视频。FramesPerTrigger = 30;从视频。TriggerRepeat = 4;从视频。FramesAcquiredFcnCount = 5;从视频。FramesAcquiredFcn = {' display_frame '};
获取数据—启动视频输入对象。每次获取五帧时,对象执行display_frame
回调函数。这个回调函数显示最近获取的记录到内存缓冲区的帧。
开始(vid)
清理-当您不再需要图像采集对象时,总是将其从内存中移除,以及引用它们的变量。
删除(vid)清晰的视频