主要内容

开始做图像采集程序

概述

本节说明了创建一个图像采集应用程序所需的基本步骤通过实现一个简单的运动检测应用程序。通过执行应用程序检测到运动场景pixel-to-pixel成对比较的图像帧。如果没有在现场,在每一帧像素值保持不变。当图像中移动,改变的应用程序显示的像素值。

这个例子强调了图像采集的工具箱™如何使用软件来创建一个图像采集工作应用程序只有几行代码。

请注意

要运行示例代码在这个例子中,您必须有一个图像采集设备连接到您的系统。设备可以是一个专业图像采集设备,如抓帧器,或一个通用的微软®窗户®图像采集设备,如摄像头。代码可以使用各种类型的设备只有一些小的变化。

请注意

与以前版本的图像采集工具箱,所有的适配器的文件包含在您的安装。与R2014a版开始,每个适配器可分别通过支持包。万博1manbetx为了使用图像采集工具箱,您必须安装相机使用的适配器。看到图像采集硬件适配器支持包万博1manbetx使用MATLAB进行安装适配器的信息®附加组件。

使用图像采集工具箱软件获取图像数据,您必须执行以下基本步骤。

一步

描述

步骤1:

安装和配置您的图像采集设备

步骤2:

检索信息,惟一地标识你的图像采集设备的图像采集软件工具箱

步骤3:

创建一个视频输入对象

步骤4:

预览视频(可选)

步骤5:

配置图像采集对象属性(可选)

步骤6:

获取图像数据

步骤7:

清理

图像处理工具箱™软件需要使用图像采集软件工具箱

图像采集工具产品,包括图像采集工具,需要你有许可证的产品从R2008b图像处理工具箱。

如果你已经有图像处理工具箱™产品,您不需要做任何事。

如果你没有图像处理工具箱产品,图像采集工具箱™软件R2008a和早些时候将继续工作。如果你想使用R2008b或将来的版本中,和你有一个当前活动许可证的图像采集软件工具箱,您可以免费下载产品图像处理工具箱。新客户需要购买这两个产品使用图像采集工具产品。s manbetx 845

如果你有任何问题,请联系MathWorks客户服务。

步骤1:安装你的图像采集设备

遵循的设置说明您的图像采集设备。设置一般包括:

  • 抓帧器板安装在你的电脑。

  • 安装任何软件驱动程序所需的设备。这些都是由设备供应商提供。

  • 相机连接到连接器抓帧器董事会。

  • 验证相机工作正常运行的应用软件,相机和观看视频直播。

通用窗口图像采集设备,如摄像头和数字视频摄像机,通常不需要抓帧器的安装板。你这些设备直接连接到你的电脑通过USB或FireWire端口。

安装和配置图像采集硬件后,开始MATLAB在您的计算机上通过双击桌面上的图标。您不需要执行任何特殊配置的MATLAB进行图像采集。

第二步:获取硬件信息

在这个步骤中,您得到一些信息,工具箱需要惟一地标识图像采集设备你想访问。你使用这些信息当您创建一个图像采集对象,描述步骤3:创建一个视频输入对象

下表列出了这些信息。您使用imaqhwinfo函数来检索每个条目。

设备信息

描述

适配器名称

一个适配器的软件工具箱使用与一个图像采集设备通过设备驱动程序。工具箱包括适配器为特定供应商的图像采集设备和特定类的图像采集设备。看到确定适配器名称为更多的信息。

设备ID

设备ID是一个数字,适配器分配来唯一地标识每个图像采集设备,它可以交流。看到确定设备ID为更多的信息。

请注意

指定设备ID是可选的;工具箱使用第一个可用的设备ID作为默认。

视频格式

视频格式指定图像分辨率(宽度和高度)和其他方面的视频。图像采集设备通常支持多种视频格式。万博1manbetx看到确定支持的视频格式万博1manbetx为更多的信息。

请注意

指定的视频格式是可选的;工具箱使用一个作为默认支持的格式。万博1manbetx

确定适配器名称

确定适配器的名称,输入imaqhwinfo在MATLAB函数提示不带任何参数。

imaqhwinfo ans = InstalledAdaptors: {“dcam”“winvideo”} MATLABVersion:“7.4 (R2007a)”ToolboxName:“图像采集工具箱”ToolboxVersion:“2.1 (R2007a)”

在返回的数据imaqhwinfo,InstalledAdaptors字段列表在您的计算机上可用的适配器。在这个例子中,imaqhwinfo发现两个计算机上可用的适配器:“dcam”“winvideo”。清单在你的电脑可能只包含一个适配器的名称。选择适配器名称,提供对你的图像采集设备的访问。有关更多信息,请参见确定设备适配器的名称

确定设备ID

为了找到一个特定的图像采集设备的设备ID,进入imaqhwinfo在提示符MATLAB函数,指定适配器的名称作为唯一的参数。(你发现在第一次调用适配器的名字imaqhwinfo中所描述的,确定适配器名称)。在返回的数据的deviceid包含设备id字段是一个单元阵列的所有设备通过指定适配器来访问。

请注意

下面的例子使用了DCAM适配器。你应该用适配器的名称你想使用。

信息= imaqhwinfo (dcam)信息= AdaptorDllName: [1 x77 char] AdaptorDllVersion:“2.1 (R2007a)”AdaptorName:“dcam”的deviceid: {[1]} DeviceInfo: [1 x1 struct]

确定支持的视频格式万博1manbetx

,以确定哪些视频格式的图像采集设备支持,看看万博1manbetxDeviceInfo返回的数据imaqhwinfo。的DeviceInfo字段是一个结构数组,其中每个结构提供关于一个特定的信息设备。查看特定设备的设备信息,您可以使用设备ID作为参考的结构数组。或者,您可以查看信息,通过调用一个特定的设备imaqhwinfo函数,指定适配器名称和设备ID作为参数。

得到一个设备支持的视频格式的列表,看看万博1manbetx万博1manbetxSupportedFormats在设备信息结构。的万博1manbetxSupportedFormats字段是一个向量,其中每个字符向量的单元阵列的名字是视频格式支持的设备。万博1manbetx有关更多信息,请参见确定支持的视频格式万博1manbetx

dev_info = imaqhwinfo (dcam, 1) dev_info = DefaultFormat:“F7_Y8_1024x768”DeviceFileSu万博1manbetxpported: 0设备名称:“XCD-X700 1.05”的DeviceID: 1 VideoInputConstructor:“videoinput (' dcam ', 1) VideoDeviceConstructor: imaq。VideoDevice (' dcam ', 1万博1manbetx) SupportedFormats: {“F7_Y8_1024x768”“Y8_1024x768”}

步骤3:创建一个视频输入对象

在这一步中创建工具箱使用的视频输入对象代表MATLAB和图像采集设备之间的联系。使用一个视频输入对象的属性,您可以控制图像采集过程的许多方面。关于图像采集对象的更多信息,请参阅创建图像采集对象

要创建一个视频输入对象,可以使用videoinput在提示符MATLAB函数。的DeviceInfo返回的结构imaqhwinfo函数包含默认videoinput功能语法的设备VideoInputConstructor字段。设备信息结构的更多信息,见确定支持的视频格式万博1manbetx

下面的示例创建一个视频输入对象DCAM适配器。替代的适配器名称在您的系统上可用的图像采集设备。

vid = videoinput (' dcam ' 1 ' Y8_1024x768 ')

videoinput函数接受三个参数:适配器名称,设备ID,和视频格式。你在步骤2中检索这些信息。适配器名称是惟一需要的参数;的videoinput函数可以使用默认值为设备ID和视频格式。确定默认的视频格式,看看DefaultFormat在设备信息结构。看到确定支持的视频格式万博1manbetx为更多的信息。

而不是指定视频格式,您可以选择指定设备的配置文件的名称,也称为相机文件。设备配置文件通常由抓帧器供应商。这些文件包含所有必需的配置设置使用一个特定的相机与设备。看到使用设备配置文件(相机文件)为更多的信息。

查看视频输入对象的总结

查看刚刚创建的总结视频输入对象,输入变量名从视频在MATLAB命令提示符。摘要信息显示显示了对象的许多特点,如帧的数量将被捕获每个触发器,触发器类型和对象的当前状态。你可以使用视频输入对象属性来控制这些特征。看到第五步:配置对象属性(可选)为更多的信息。

vid的总结视频输入对象使用“XCD-X700 1.05”。采集源(s): input1可用。采集参数:“input1”是当前选中的源。10帧/触发使用选定的来源。“Y8_1024x768”视频数据被记录在开始。首先抓住每帧(s)。日志数据触发“记忆”。触发参数:1“立即”触发(s)开始。状态:等待开始。0帧开始以来获得的。 0 frames available for GETDATA.

步骤4:预览视频(可选)

在您创建视频输入对象,MATLAB是能够访问图像采集设备和准备获取数据。然而,在您开始之前,您可能希望看到一个预览的视频,以确保图像令人满意。例如,您可能想改变摄像机的位置,改变照明,正确的焦点,或做一些其他变化图像采集设置。

请注意

这一步是可选的,在这一点上的过程,因为你可以预览视频随时在您创建一个视频输入对象。

预览视频流在本例中,输入预览在MATLAB函数提示,指定步骤3中创建的视频输入对象作为参数。

预览(vid)

预览函数打开一个视频预览图包含实时视频窗口在屏幕上。停止视频的流,您可以调用stoppreview函数。重新启动预览流,电话预览再次在同一视频输入对象。

在预览窗口是开放的,视频输入对象集的值预览财产“上”。如果你改变图像的特征通过设置图像采集对象属性,图像显示在预览窗口中反映了这一变化。

下图显示的视频预览窗口的例子。

视频预览窗口

关闭视频预览窗口,单击关闭在标题栏或使用按钮closepreview函数,指定视频输入对象作为参数。

closepreview (vid)

调用closepreview不带任何参数关闭所有打开的视频预览窗口。

第五步:配置对象属性(可选)

在创建视频输入对象和预览视频,您可能想要修改图像的特征或其他方面的习得过程。你完成这个设置图像采集对象属性的值。本节

图像采集对象的类型

工具箱使用两种类型的对象来表示一个图像采集装置的连接:

  • 视频输入对象

  • 视频源对象

一个视频输入对象代表了MATLAB和视频采集设备之间的连接在一个较高的水平。视频输入对象支持的属性为每个类万博1manbetx型的设备都是一样的。您创建了一个视频输入对象使用videoinput函数步骤3

当您创建一个视频输入对象,工具箱中会自动创建一个或多个视频源对象与视频输入对象相关联。每个视频源对象代表一个或多个物理数据源的集合,被视为一个单一的实体。工具箱创建视频源对象的数量取决于您所指定的设备和视频格式。在任何时候,只有一个视频源的对象,称为选择源,可以活跃。这是源用于收购。关于这些图像采集对象的更多信息,请参阅创建图像采集对象

查看对象属性

查看所有属性的完整列表支持视频输入对象或一个视频源对象,使用万博1manbetx得到函数。列出视频输入对象的属性创建在步骤3中,输入这个代码在MATLAB提示。

get (vid)

得到函数列出所有对象的属性的当前值。

一般设置:的DeviceID = 1 DiskLogger = [] DiskLoggerFrameCount = 0事件日志= [1 x0 struct] FrameGrabInterval = 1 FramesAcquired = 0 FramesAvailable = 0 FramesPerTrigger = 10日志=从LoggingMode =内存Name = Y8_1024x768-dcam-1 NumberOfBands预览= 1 =在ReturnedColorSpace =灰度ROIPosition =[0 0 1024 768] =关闭标签=运行超时= 10 Type = videoinput用户数据= []VideoFormat = Y8_1024x768 VideoResolution = (1024 768)。

查看当前选中的视频源对象的属性与视频输入对象,使用getselectedsource功能结合得到函数。的getselectedsource函数返回当前活跃的视频源。列出当前选中的视频源对象的属性与视频相关的输入对象创建在步骤3中,在MATLAB输入这段代码提示。

get (getselectedsource (vid))

得到函数列出所有对象的属性的当前值。

请注意

视频源对象属性是设备特定的。的属性列表中支持的设备连接到您的系统可能不同于万博1manbetx本例所示的列表。

一般设置:家长= [1 x1 videoinput]选择= SourceName = input1标签=类型= videosource设备特定属性:帧速率= 15 = 2048快门= 2715

设置对象属性

设置一个视频输入对象属性的值或一个视频源对象的属性,你引用对象属性将一个字段结构,使用点符号。

一些属性是只读;你不能设置其值。这些属性通常提供关于对象的状态信息。其他属性成为只读对象运行时。查看一个列表的所有属性可以设置,使用函数,指定对象作为唯一的参数。

实现连续的图像采集,设置的例子TriggerRepeat财产。设置此属性,输入这个代码在MATLAB提示。

从视频。TriggerRepeat =正;

帮助应用程序跟上传入的视频流处理数据时,设置的例子FrameGrabInterval财产5。这个指定对象获取视频流中的每个第五帧。(您可能需要试验的价值FrameGrabInterval属性找到一个值提供了最好的回应与图像采集设置)。这个例子展示了如何设置对象属性的值通过引用属性作为你的参考字段在MATLAB的结构。

从视频。FrameGrabInterval = 5;

设置一个视频源对象属性的值,你必须首先使用getselectedsource函数来检索对象。(你也可以选择源通过搜索视频输入对象视频源对象的属性选择属性设置为“上”)。

为了说明这一点,分配一个值的例子标签财产。

vid_src = getselectedsource (vid);vid_src。标签= 'motion detection setup';

请注意

得到一个选项列表你可以使用一个函数,按下选项卡关键在MATLAB命令行上输入一个函数。扩展列表,您可以滚动到选择一个属性或值。使用这种先进的选项卡完成功能,信息使用选项卡完成功能

第六步:获取图像数据

在您创建的视频输入对象和配置它的属性,您可以获取数据。这通常是任何图像采集应用程序的核心,它包括以下步骤:

  • 启动视频输入对象——你开始一个对象通过调用开始函数。从一个对象准备数据采集的对象。例如,启动一个对象锁某些对象属性的值(他们成为只读)。从一个对象不启动图像帧的获取,然而。数据记录的起始取决于一个触发器的执行。

    下面的示例调用开始函数来启动视频输入对象。对象停止当他们获得要求的帧数。因为指定连续采集的例子中,您必须调用停止函数对象。

  • 触发收购——获取数据、视频输入对象必须执行触发器。触发器可以发生在几个方面,这取决于TriggerType属性配置。例如,如果您指定一个立即触发,对象自动执行触发器,后立即开始。如果你指定一个手动触发,对象等待调用触发之前启动数据采集功能。有关更多信息,请参见获取图像数据

    在这个例子中,因为TriggerType属性设置为“立即”(默认)TriggerRepeat属性设置为,对象会自动开始执行触发器和获取的数据帧,不断。

  • 将数据引入MATLAB工作区——工具箱将获得的数据存储在一个内存缓冲区,一个磁盘文件,或两者兼而有之,这取决于视频输入的值对象LoggingMode财产。使用这些数据,你必须把它到MATLAB工作区。将多个帧到工作区中,使用getdata函数。MATLAB工作区中的数据之后,您可以像任何其他数据操作。有关更多信息,请参见处理图像数据在MATLAB工作区

请注意

工具箱提供了一种方便的方法来获取一帧图像数据不需要开始或触发对象。看到将一个帧到工作区中为更多的信息。

运行这个例子

要运行示例,输入下面的代码在MATLAB提示。示例循环直到指定的帧数。在每次循环迭代中,示例调用getdata将最近的两个框架引入MATLAB工作区。检测运动,减去从另一帧的例子中,创建一个不同的形象,然后显示它。获得帧的像素变化值将图像有非零值的差异。

getdata函数从内存中删除帧缓冲区时,将他们带入MATLAB工作区。重要的是将帧从内存缓冲区到MATLAB工作区及时。如果你不将获得帧从内存中,您可以快速排气系统上所有可用的内存。

请注意

图像处理工具箱中的例子使用功能的软件。

%创建视频输入对象。vid = videoinput (' dcam ' 1 ' Y8_1024x768 ') %为这个应用程序设置视频输入对象属性。从视频。TriggerRepeat = 100;从视频。FrameGrabInterval = 5;%设置视频源对象的价值属性。vid_src = getselectedsource (vid);vid_src。标签= 'motion detection setup'; % Create a figure window. figure; % Start acquiring frames. start(vid) % Calculate difference image and display it. while(vid.FramesAvailable >= 2) data = getdata(vid,2); diff_im = imabsdiff(data(:,:,:,1),data(:,:,:,2)); imshow(diff_im); drawnow % update figure window end stop(vid)

请注意,drawnow调用后使用imshow为了确保图窗口更新。这是好的做法,当更新GUI或图在一个循环。

下面的图显示了示例显示检测到的运动。在图中,显示区域代表运动。

图窗口显示的例子

请注意

得到一个选项列表你可以使用一个函数,按下选项卡关键在MATLAB命令行上输入一个函数。扩展列表,您可以滚动到选择一个属性或值。使用这种先进的选项卡完成功能,信息使用选项卡完成功能

图像数据的MATLAB工作空间

在这个例子中,getdata函数返回的图像帧变量数据作为480 -的- 640 - 1 - 10 8位数据的数组(uint8)。

谁的名字大小字节类数据4 d 3072000 uint8数组dev_info 1 x1 1601结构阵列信息1 x1 2467结构体数组vid 1 x1 1138 videoinput对象vid_src 1 x1 726 videosource对象

数组的高度和宽度主要由视频分辨率的视频格式。然而,您可以使用ROIPosition属性指定的值取代视频分辨率。设备通常表达视频分辨率column-by-row;MATLAB row-by-column表示矩阵维度。

第三个维度代表图像中颜色的数量。因为数据的例子是一个灰度图像,三维是1。RGB格式、图像帧有三个乐队:红色的是第一个,绿色的是第二个,蓝色的是第三个。第四维代表帧的数量已经从视频流获得。

第七步:清理

当您使用完你的图像采集对象,您可以删除它们从内存和清晰的MATLAB工作区与这些对象相关的变量。

删除(vid)明确关上(gcf)

有关更多信息,请参见删除图像采集对象