主要内容

引入图像数据MATLAB工作空间

概述

工具箱提供了三种方式将帧从内存缓冲区到MATLAB®工作区:

  • 从缓冲区中删除多个帧——将指定数量的帧从内存缓冲区进入工作区,使用getdata函数。的getdata函数从内存中删除帧缓冲区时他们到工作区中。MATLAB命令行,直到所有的功能块请求帧可用,或者直到超时过期值。有关更多信息,请参见移动多个帧到工作区中

  • 查看最近收购了帧缓冲——把最近收购了帧在内存缓冲区到工作区中没有把他们从缓冲区,使用peekdata函数。当返回帧,peekdata始于最近收购的框架和工作落后在内存缓冲区中。相比之下,getdata初开始的缓冲区,返回最古老的收购框架。peekdata不阻止命令行并不能保证返回的所有帧请求。有关更多信息,请参见查看框架在内存缓冲区中

  • 将一帧数据到工作区中作为一个方便,工具箱提供了getsnapshot函数,它返回一个单帧的数据到MATLAB工作区。因为getsnapshot函数不需要启动对象或触发一个收购,这是最简单的方法把图像数据到工作区中。getsnapshot是独立的内存缓冲区;它可以返回一个框架即使内存缓冲区为空,返回的帧并没有影响的价值FramesAvailable财产。有关更多信息,请参见将一个帧到工作区中。对使用的一个例子getsnapshot,请参阅图像采集工具箱™的例子获得一个单一的图像在一个循环中例子列表顶部的图像采集工具箱主要文档中心页面,或打开文件demoimaq_GetSnapshot。在MATLAB编辑器。

移动多个帧到工作区中

将多个数据帧从内存缓冲区到MATLAB工作区,使用getdata函数。默认情况下,getdata检索指定的帧的数量FramesPerTrigger财产,但您可以指定任意数量。看到getdata参考页面关于这个函数的完整信息。

请注意

getdata从内存缓冲区函数移动帧到工作区,它从内存中删除帧缓冲区。

在这个图中,getdata被称为T115帧请求,但只有6个框架可用的内存缓冲区。getdata块直到指定的帧数可用,T2,此时getdata移动帧到MATLAB工作区并将控制返回到命令提示符。

getdata块直到框架可用

获得10秒的图像数据

这个例子展示了如何配置一个近似使用基于时间的收购FramesPerTrigger属性:

  1. 创建一个图像采集对象——这个例子创建了一个视频输入对象的窗口®图像采集设备。要在您的系统上运行这个例子,可以使用imaqhwinfo函数来得到对象构造函数的图像采集设备和替代品,下面的代码的语法。

    vid = videoinput (' winvideo ', 1);
  2. 配置属性——获得10秒的数据,确定你的图像采集设备的帧速率,然后帧速率乘以的秒数你想获取的数据。这个乘法的产品的价值FramesPerTrigger财产。

    对于这个示例,假设每秒30帧的帧率(fps)。30乘以10,你需要设置FramesPerTrigger财产价值300。

    从视频。FramesPerTrigger = 300;
  3. 图像采集对象开始——调用开始函数图像采集对象开始。

    开始(vid)

    对象执行立即触发,并开始获取帧的数据。的开始函数返回对象控制立即命令行,但继续记录数据到内存缓冲区。日志记录指定的帧数后,对象停止运行。

  4. 把获得的数据到工作区中——验证你获得你想要的数据量,使用可选的getdata语法返回每一帧的时间戳。第一个时间戳和最后一个时间戳的区别应该近似的数据量的预期。

    (数据时间)= getdata (vid, 300);elapsed_time =时间》(300)——10.0467 (1)
  5. 清理总是删除图像采集对象从内存中,引用它们的变量,当你不再需要他们。

    删除(vid)清晰的视频

查看框架在内存缓冲区中

查看示例框架从内存缓冲区没有删除它们,使用peekdata函数。

peekdata函数始终返回最近收购的帧在内存缓冲区中。例如,如果您请求三张照片,peekdata返回最近收购了帧缓冲的时候立即请求和两个帧之前。

下图说明了这个过程。命令peekdata (vid, 3)在三个不同的时间(T1T2,T3)。阴影帧显示返回的帧peekdata在每一个电话。(peekdata返回帧没有从内存缓冲区删除它们。)

注意图中,T3,只有两个帧自从上次打电话已经成为可用peekdata。在这种情况下,peekdata只返回两帧,返回一个警告,它比要求更少的数据。

返回的帧peekdata

请注意

peekdata函数不返回任何数据,如果在磁盘日志记录模式下运行。

下面的例子说明了如何使用peekdata:

  1. 创建一个图像采集对象——本例中为数据创建一个视频输入对象的翻译®图像采集设备。要在您的系统上运行这个例子,可以使用imaqhwinfo函数来得到对象构造函数的图像采集设备和替代品,下面的代码的语法。

    vid = videoinput (dt, 1);
  2. 配置属性——在这个例子中,配置一个手动触发。你必须使用triggerconfig函数来指定触发类型。

    triggerconfig(请看“手册”)

    此外,配置一个足够大的收购让几个电话peekdata在它结束之前。

    从视频。FramesPerTrigger = 300;
  3. 图像采集对象开始——调用开始函数图像采集对象开始。

    开始(vid)

    视频对象现在运行但没有日志记录。

    正在(vid) ans = 1 islogging (vid) ans = 0
  4. 使用peekdata查看帧之前触发——如果你打电话peekdata在触发收购之前,peekdata只能返回一个单帧的数据,因为数据记录尚未启动,内存缓冲区为空。如果多个请求帧,peekdata发出一个警告,它返回少于要求的帧数。

    pdata = peekdata (vid, 50);警告:PEEKDATA不能返回所请求的所有帧。

    验证peekdata返回一个单一的框架。一帧数据应该有相同的指定的宽度和高度ROIPosition财产和相同数量的乐队,是指定的NumberOfBands财产。在本例中,数据的视频格式是RGB的价值NumberOfBands属性是3。

    谁的名字大小字节类pdata 96 x128x3 36864 uint8 vid 1 x1 1060 videoinput对象数组

    验证对象没有获得任何帧。

    从视频。FramesAcquired ans = 0
  5. 触发收购——调用触发函数触发一个收购。

    触发(vid)

    内存缓冲区对象开始日志框架。

  6. 查看最近收购了帧在收购过程中,调用peekdata几次来查看最新的帧在内存缓冲区中。根据帧的数量你请求,这些请求的时间,peekdata可能返回少于指定帧数。

    pdata = peekdata (vid, 50);

    来验证peekdata你要求的帧,返回检查的尺寸pdatapeekdata返回一个四维数组的帧,最后维度表示返回的帧数。

    谁的名字大小字节类pdata 4 d 1060 uint8数组vid 1 x1 1843200 videoinput对象大小(pdata) ans 50 = 96 128 3
  7. 清理总是删除图像采集对象从内存中,引用它们的变量,当你不再需要他们。

    删除(vid)清晰的视频

将一个帧到工作区中

将一帧图像数据引入MATLAB工作区,使用getsnapshot函数。你可以叫的getsnapshot函数对象创建后在任何时间。

这个例子演示了如何简单的使用getsnapshot函数。

  1. 创建一个图像采集对象——这个例子创建了一个视频输入对象Matrox®设备。要在您的系统上运行这个例子,可以使用imaqhwinfo函数来得到对象构造函数的图像采集设备和替代品,下面的代码的语法。

    vid = videoinput (' matrox ', 1);
  2. 一个框架带进工作区——调用getsnapshot函数将一个帧到工作区中。请注意,您不需要启动视频输入对象在调用之前getsnapshot函数。

    帧= getsnapshot (vid);

    getsnapshot函数返回一个图像相同的指定的宽度和高度ROIPosition财产和相同数量的乐队所指定的NumberOfBands财产。在本例中,数据的视频格式是RGB的价值NumberOfBands属性是3。

    谁的名字大小字节数组类框架96 x128x3 36864 uint8 vid 1 x1 1060 videoinput对象

    注意,返回的帧getsnapshot不是从内存缓冲区中删除,如果帧存储,并且不影响的价值FramesAvailable财产。

  3. 清理总是删除图像采集对象从内存中,引用它们的变量,当你不再需要他们。

    删除(vid)清晰的视频

对使用的一个例子getsnapshot,请参阅图像采集工具箱的例子获得一个单一的图像在一个循环中例子列表顶部的图像采集工具箱主要文档中心页面,或打开文件demoimaq_GetSnapshot。在MATLAB编辑器。