主要内容

开始以编程方式进行图像采集

概述

本节示出了通过实现简单的运动检测应用来创建图像采集应用所需的基本步骤。该应用通过以对传入的图像帧对的像素对像素比较来检测场景中的移动。如果在场景中没有移动,则每个帧中的像素值保持不变。当某些东西在图像中移动时,应用程序显示具有更改值的像素。

该示例突出了如何使用图像采集工具箱™软件以仅具有几行代码创建工作图像采集应用程序。

请注意

要在此示例中运行示例代码,必须具有连接到系统的图像采集设备。该设备可以是专业级图像采集设备,例如帧抓取器,或通用Microsoft®窗户®图像采集设备,例如网络摄像头。代码可以与各种类型的设备一起使用,只有轻微的更改。

请注意

对于以前版本的图像采集工具箱,所有适配器的文件都包含在安装中。从版本R2014a开始,每个适配器都可以通过支持包单独获得。金宝app为了使用图像采集工具箱,必须安装相机使用的适配器。看到用于硬件适配器的图像采集支持包金宝app有关使用MATLAB安装适配器的信息®附加组件。

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

描述

步骤1

安装并配置图像采集设备

步骤2:

将唯一标识图像采集设备的信息检索到图像采集工具箱软件

步骤3

创建视频输入对象

步骤4

预览视频流(可选)

步骤5:

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

步骤6

获得图像数据

步骤7

清理

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

图像采集工具箱产品(包括图像采集工具)要求您拥有从R2008b开始的图像处理工具箱产品的许可证。

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

如果您没有图像处理工具箱产品,则图像采集工具箱™软件R2008a和更早版本将继续工作。如果您想使用R2008b或未来的版本,并且您有图像采集工具箱软件的当前激活许可证,您可以免费下载图像处理工具箱产品。新客户将需要购买这两种产品来使用图像采集工具箱产品。下载188bet金宝搏

如果您有任何疑问,请联系Mathworks客户服务。

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

按照图像采集设备附带的安装说明操作。设置一般包括:

  • 在你的电脑里安装抓框板。

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

  • 将相机连接到框架抓斗板上的连接器。

  • 通过运行相机自带的应用软件,查看实时视频流,验证相机是否正常工作。

一般的Windows图像采集设备,如网络摄像机和数字视频摄像机,通常不需要安装帧捕捉板。你可以通过USB或火线端口将这些设备直接连接到你的电脑上。

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

第2步:检索硬件信息

在此步骤中,您将获得工具箱所需的几条信息,以惟一地标识您想要访问的图像采集设备。在创建图像采集对象时使用此信息,请参见步骤3:创建一个视频输入对象

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

设备信息

描述

适配器名称

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

设备ID

设备ID是适配器分配以唯一地识别它可以进行通信的每个图像采集设备的数字。看到确定设备ID想要查询更多的信息。

请注意

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

视频格式

视频格式指定视频流的图像分辨率(宽度和高度)和其他方面。图像采集设备通常支持多种视频格式。金宝app看到确定支持的视频格式金宝app想要查询更多的信息。

请注意

可选指定视频格式;工具箱使用一种受支持的格式作为默认格式。金宝app

确定适配器名称

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

imaqhwinfo ans = installdadaptors: {'dcam' 'winvideo'} MATLABVersion: '7.4 (R2007a)' ToolboxName: 'Image Acquisition Toolbox' ToolboxVersion: '2.1 (R2007a)'

返回的数据中imaqhwinfo.,InstalledAdaptors字段列出计算机上可用的适配器。在这个例子中,imaqhwinfo.在计算机上找到两个适配器:'dcam'“winvideo”.计算机上的列表可能仅包含一个适配器名称。选择提供对图像采集设备访问的适配器名称。有关更多信息,请参阅确定设备适配器名称

确定设备ID

要查找特定图像采集设备的设备ID,请输入imaqhwinfo.函数,指定适配器的名称作为唯一参数。(您在第一次调用中找到了适配器名称imaqhwinfo.中所描述的,确定适配器名称)。在返回的数据中的deviceid字段是包含通过指定适配器可访问的所有设备的设备id的单元格数组。

请注意

本例使用DCAM适配器。您应该替换您想要使用的适配器的名称。

INFO = IMAQHWINFO('DCAM'​​)信息= Adaptordllname:[1x77 char] Adaptordllversion:'2.1(r2007a)'AdaptorName:'dcam'deviceIds:{[1]} deviceInfo:[1x1 struct]

确定支持的视频格式金宝app

要确定图像采集设备支持哪种视频格式,请查看金宝app设备信息返回的数据字段imaqhwinfo..的设备信息字段是一个结构数组,其中每个结构提供有关特定设备的信息。要查看特定设备的设备信息,可以使用设备ID作为结构数组的引用。或者,您可以通过调用imaqhwinfo.函数,指定适配器名称和设备ID作为参数。

要获得设备支持的视频格式列表,请查看金宝app金宝appSupportedFormats字段。的金宝appSupportedFormats字段是字符向量的单元阵列,其中每个字符向量是设备支持的视频格式的名称。金宝app有关更多信息,请参阅确定支持的视频格式金宝app

dev_info = imaqhwinfo('dcam',1) dev_info = DefaultFormat: 'F7_Y8_1024x768' DeviceFile金宝appSupported: 0 DeviceName: 'XCD-X700 1.05' DeviceID: 1 VideoInputConstructor: 'videoinput('dcam', 1)' VideoDeviceConstructor: 'imaq. dev_info = DefaultFormat: 'F7_Y8_1024x768' DeviceFileSupported: 0 DeviceName: 'XCD-X700 1.05' DeviceID: 1 VideoInputConstructor: 'videoinput('dcam', 1)' VideoDeviceConstructor: 'imaq. dev_info = DefaultFormat: 'F7_Y8_1024x768'VideoDevice('dcam', 1)' 金宝appSupportedFormats: {'F7_Y8_1024x768' 'Y8_1024x768'}

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

在这一步中,创建工具箱用来表示MATLAB和图像采集设备之间的连接的视频输入对象。利用视频输入对象的属性,可以控制图像采集过程的许多方面。有关图像采集对象的更多信息,请参见创建图像采集对象

要创建视频输入对象,请使用videoinput在matlab提示符下的功能。的设备信息属性返回的结构imaqhwinfo.函数包含默认值videoinput中的设备的函数语法VideoInputConstructor场地。有关更多信息,设备信息结构,请参阅确定支持的视频格式金宝app

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

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

videoinput函数接受三个参数:适配器名称,设备ID和视频格式。您在步骤2中检索此信息。适配器名称是唯一必需的参数;这videoinput功能可以使用默认的设备ID和视频格式。要确定默认的视频格式,请查看DefaultFormat字段。看到确定支持的视频格式金宝app想要查询更多的信息。

您可以指定设备配置文件(也称为摄像机文件)的名称,而不是指定视频格式。设备配置文件通常由帧抓取器供应商提供。这些文件包含在设备上使用特定相机所需的所有配置设置。看到使用设备配置文件(相机文件)想要查询更多的信息。

查看视频输入对象摘要

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

使用“XCD-X700 1.05”视频输入对象的VID摘要。采集源:INPUT1可用。采集参数:'输入1'是当前所选源。使用所选源的每个触发器10帧。'Y8_1024x768'在开始时要记录的视频数据。每一个框架中首先抓住。将数据记录到触发器上的“内存”。触发参数:启动时1'立即'触发器。状态:等待开始。自开始以来获取0帧。 0 frames available for GETDATA.

第4步:预览视频流(可选)

创建完视频输入对象后,MATLAB就可以访问图像采集设备并准备采集数据了。但是,在开始之前,您可能希望看到视频流的预览,以确保图像是令人满意的。例如,您可能想要改变相机的位置,改变照明,纠正焦点,或对您的图像采集设置做一些其他的更改。

请注意

此步骤在过程中是可选的,因为您可以在创建视频输入对象后的任何时间预览视频流。

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

预览(vid)

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

当预览窗口打开时,视频输入对象设置预览财产'在'.如果通过设置图像获取对象属性更改图像的特性,则预览窗口中显示的图像反映了更改。

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

视频预览窗口

要关闭“视频预览”窗口,请单击“关闭按钮,或使用closepreview函数,将视频输入对象指定为参数。

关闭预览(VID)

打电话closepreview没有任何参数关闭所有打开的视频预览窗口。

步骤5:配置对象属性(可选)

创建视频输入对象并预览视频流后,可能需要修改图像的特征或采集过程的其他方面。您可以通过设置图像采集对象属性的值来完成此操作。本节

图像采集对象的类型

工具箱使用两种类型的对象来表示与图像采集设备的连接:

  • 视频输入对象

  • 视频源对象

视频输入对象代表了MATLAB和视频采集设备之间的高级连接。视频输入对象支持的属性对于每种金宝app设备类型都是相同的。控件创建视频输入对象videoinput函数第3步

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

查看对象属性

要查看视频输入对象或视频源对象支持的所有属性的完整列表,请使用金宝app得到函数。要列出第3步中创建的视频输入对象的属性,请在MATLAB提示符处输入以下代码。

get (vid)

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

常规设置:DeviceID = 1 DiskLogger = 0 eventLog = [1x0 struct] FrameGrabInterval = 1 FramesAvailable = 0 FramesPertrigger = 10日志记录= OFF LoggingMode = Memory Name = Y8_1024X768-DCAM-1 NumberOfBands = 1预览= ONRepressColorSpace =灰度roiposition = [0 0 1024 768]运行= off标记= timeout = 10型= VideoOmput UserData = [] VideoFormat = Y8_1024X768 videolatution = [1024 768]。..

要查看与此视频输入对象关联的当前选定视频源对象的属性,请使用getSelectedSource.函数与得到函数。的getSelectedSource.函数返回当前活动的视频源。要列出与在步骤3中创建的视频输入对象关联的当前所选视频源对象的属性,请在MATLAB提示符下输入此代码。

get(getselectedsource(vid))

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

请注意

视频源对象属性是特定于设备的。连接到您的系统的设备支持的属性列表可能与本示例金宝app中显示的列表不同。

常规设置:父= [1x1 videoInput]所选= on sourcename = input1 tag = type = videoSource设备特定属性:frameate = 15增益= 2048快门= 2715

设置对象属性

要设置视频输入对象属性或视频源对象属性的值,请使用DOT符号作为结构中的字段,引用对象属性。

有些属性是只读的;您不能设置它们的值。这些属性通常提供有关对象状态的信息。其他属性在对象运行时才变为只读。要查看可以设置的所有属性的列表,请使用函数,将对象指定为唯一的参数。

为了实现连续图像采集,本实例设置了TriggerRepeat财产.要设置此属性,请在MATLAB提示符处输入此代码。

Vid.TriggerRepeat = INF;

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

vid.framegrabinterval = 5;

要设置视频源对象属性的值,必须先使用getSelectedSource.函数检索对象。(您还可以通过搜索视频输入对象来获取所选源属性的视频源对象选择物业设为'在')。

为说明问题,该示例将一个值赋给标签财产。

vid_src = getselectedsource (vid);Vid_src.tag ='Motion Detector Setup';

请注意

要获得可用于某个函数的选项列表,请按选项卡在MATLAB命令行上输入函数后键入。列表将展开,您可以滚动以选择属性或值。有关使用这个高级选项卡补全功能的信息,请参见使用Tab完成功能

第6步:获取图像数据

创建视频输入对象并配置其属性后,可以获取数据。这通常是任何图像采集应用程序的核心,它涉及这些步骤:

  • 开始视频输入对象-通过调用开始函数。启动对象为数据采集做准备。例如,启动一个对象会锁定某些对象属性的值(它们变成只读)。然而,启动一个对象并不初始化图像帧的获取。数据日志记录的启动依赖于触发器的执行。

    下面的示例调用开始函数启动视频输入对象。对象在获得所请求的帧数时停止。因为该示例指定了连续获取,所以必须调用停止函数停止对象。

  • 触发收购—为了获取数据,视频输入对象必须执行触发器。触发器可以以多种方式发生,这取决于TriggerType属性配置。例如,如果指定立即触发器,则对象在启动后立即自动执行触发器。如果指定手动触发器,则对象等待呼叫触发在它启动数据采集之前的功能。有关更多信息,请参阅获取图像数据

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

  • 将数据带入MATLAB工作区工具箱将获取的数据存储在内存缓冲区、磁盘文件或两者中,具体取决于视频输入对象的值LoggingMode财产。要使用此数据,必须将其带入MATLAB工作区。要将多个帧带入工作区,请使用getdata函数。一旦数据进入MATLAB工作区,就可以像处理其他数据一样处理它。有关更多信息,请参阅在MATLAB工作空间中使用图像数据

请注意

工具箱提供了一种方便的方法来获取不需要启动或触发对象的单一帧图像数据。看到将一个单一的框架带入工作区想要查询更多的信息。

运行这个例子

要运行示例,请在MATLAB提示符下输入以下代码。在获取指定数量的帧之前的示例循环。在每个循环迭代中,示例调用getdata将两个最近的帧带入MATLAB工作区。为了检测运动,该示例从另一帧中减去一帧,创建差异图像,然后显示它。在所获取的帧中具有更改值的像素将具有差异图像中的非零值。

getdata函数在将它们带入MATLAB工作区时从内存缓冲区中删除帧。重要的是要及时将帧从内存缓冲区移动到MATLAB工作空间中。如果您没有从内存移动所获取的帧,则可以快速排除系统上可用的所有内存。

请注意

该示例在图像处理工具箱软件中使用功能。

创建视频输入对象。为这个应用程序设置视频输入对象的属性。从视频。TriggerRepeat = 100;vid.framegrabinterval = 5;%设置视频源对象属性值。vid_src = getselectedsource (vid);Vid_src.tag ='Motion Detector Setup';创建一个图形窗口。图; % 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)

注意A.drawn在呼叫后使用imshow.以确保图形窗口被更新。这是在循环中更新GUI或图形时的好做法。

下图显示了该示例如何显示检测到的运动。图中显示了表示运动的区域。

图窗口显示示例

请注意

要获得可用于某个函数的选项列表,请按选项卡在MATLAB命令行上输入函数后键入。列表将展开,您可以滚动以选择属性或值。有关使用这个高级选项卡补全功能的信息,请参见使用Tab完成功能

的图像数据马铃薯工作空间

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

whoos Name Size Bytes Class data 4-D 3072000 uint8 array dev_info 1x1 1601 struct array info 1x1 2467 struct array vid 1x1 1138 videoinput object vid_src 1x1 726 videosource object

阵列的高度和宽度主要由视频格式的视频分辨率决定。但是,你可以使用ROIPosition属性指定取代视频分辨率的值。设备通常以列逐行表示视频分辨率;MATLAB表示为逐行列的矩阵尺寸。

第三维表示图像中的颜色频带的数量。因为示例数据是灰度图像,所以第三维为1.对于RGB格式,图像帧有三个频段:红色是第一个,绿色是第二个,蓝色是第三个乐队。第四维表示从视频流中获取的帧数。

第7步:清理

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

删除(vid)清除关闭(gcf)

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