主要内容

预览实时数据从图像采集设备

简介

在你连接MATLAB之后®到图像采集设备,您可以使用视频预览窗口查看实时视频流。预览视频数据可以帮助您确保所捕获的图像是令人满意的。

例如,通过查看预览,你可以验证灯光和焦点是否正确。如果您更改图像的特征,则通过使用视频输入对象和视频源对象属性,在“视频预览”窗口中显示的图像将更改以反映新的属性设置。

以下部分提供关于使用“视频预览”窗口的更多信息。

不使用工具箱的视频预览窗口,您可以在任何句柄图形中显示实时视频预览流®图像对象。通过这种方式,您可以在自己创建的GUI中包含视频预览。下面的部分将描述此功能。

打开视频预览窗口

要打开“视频预览”窗口,请使用预览函数。“视频预览”窗口显示来自设备的实时视频流。每个设备只能打开一个预览窗口。当使用多台设备时,可以同时打开多个预览窗口。

下面的示例创建一个视频输入对象,然后为该视频输入对象打开一个视频预览窗口。

vid = videoinput (“winvideo”);预览(vid);

下图显示了此示例创建的视频预览窗口。“视频预览”窗口显示实时视频流。预览图像的大小由视频输入对象的值决定ROIPosition财产。视频预览窗口显示100%放大的视频数据。

除了预览图像之外,视频预览窗口还包括关于图像的信息,例如视频帧的时间戳、视频分辨率、帧速率和视频输入对象的当前状态。

请注意

因为视频格式通常将分辨率表示为按宽按高,视频预览窗口将图像帧的大小表示为按列逐行,而不是标准的MATLAB逐列格式。

请注意

图像采集工具箱™预览窗口支持显示多达16位的图像数据。预览窗口被设计为只显示8位数据,但许多相机返回10位、12位、14位或16位数据。预览窗口显示支持这些更高位深的相机。但是,为了显示预览数据,更大的位数据被缩放到8位。若要在“预览”窗口中捕捉灰度图像的全位深度图像数据,请设置PreviewFullBitDepth财产“上”

停止预览视频流

当您使用预览功能开始预览图像数据,视频预览窗口显示来自设备的实时视频流的视图。若要停止实时视频流的更新,请调用stoppreview函数。

下面的例子创建了一个视频输入对象,并打开了一个视频预览窗口。然后,该示例调用stoppreview函数在这个视频输入对象上。“视频预览”窗口停止更新显示的图像并停止更新时间戳。“视频预览”窗口中显示的状态也会发生变化,表示预览已停止。

vid = videoinput (“winvideo”);预览(vid) stoppreview (vid)

若要在“视频预览”窗口中重启视频流,请调用预览同样的视频输入对象。

预览(vid)

关闭视频预览窗口

要关闭特定的“视频预览”窗口,请使用closepreview函数,将视频输入对象指定为参数。关闭“视频预览”窗口时,不需要停止视频直播。

closepreview (vid)

若要关闭所有当前打开的“视频预览”窗口,请使用closepreview函数不带任何参数。

closepreview

请注意

当不带实参调用时,closepreview函数只关闭视频预览窗口。的closepreview函数不会关闭您在其中指导了实时预览视频流的任何其他图形窗口。有关更多信息,请参见在自定义gui中预览数据

在自定义gui中预览数据

不使用工具箱的“视频预览”窗口,您可以使用预览函数将直播视频流导向任何Handle Graphics图像对象。通过这种方式,您可以将工具箱的预览功能合并到自己创建的GUI中。(您也可以在显示实时视频时进行自定义处理。信息,请参阅执行预览数据的自定义处理)。

要使用此功能,请创建一个图像对象,然后调用预览函数,将图像对象的句柄指定为参数。的预览函数将实时视频流输出到指定的图像对象。

下面的示例创建一个图窗口,然后在图中创建一个与视频帧大小相同的图像对象。然后,该示例调用预览函数,指定图像对象的句柄。

创建一个视频输入对象。vid = videoinput (“winvideo”);创建一个图形窗口。这个例子关闭了默认设置工具栏、菜单栏和图形编号。图(“工具栏”,“没有”,...菜单条的,“没有”,...“NumberTitle”,“关闭”,...“名字”,“我的预览窗口”);创建要显示的图像对象%视频预览数据。调整图像的大小%对象匹配视频帧的尺寸。vidRes = vid.VideoResolution;nBands = vid.NumberOfBands;hImage = image(0 (vidRes(2), vidRes(1), nBands));在GUI中显示视频数据。预览(vid hImage);

当您运行此示例时,它将创建如下图所示的GUI。

自定义预览

执行预览数据的自定义处理

对象指定图像对象时预览函数(见在自定义gui中预览数据),您还可以选择指定一个函数预览每次接收到图像帧时执行。

要使用此功能,请遵循以下步骤:

  1. 创建您希望为每个图像帧执行的函数,称为更新预览窗口函数。有关此函数的信息,请参见创建更新预览窗口函数

  2. 创建一个图像对象。

  3. 配置图像对象的值“UpdatePreviewWindowFcn”应用程序定义的数据作为更新预览窗口函数的函数句柄。有关更多信息,请参见指定更新预览功能

  4. 调用预览函数,将图像对象的句柄指定为参数。

请注意

如果指定了更新预览窗口函数,除了函数执行的任何处理之外,它还必须在图像对象中显示视频数据。可以通过更新CData带有传入视频帧的图像对象的。有关更新图像对象中显示的数据的一些性能指导原则,请参见技术解决方案1-1B022

创建更新预览窗口函数

预览调用您指定的更新预览窗口函数,它将以下参数传递给您的函数。

论点

描述

obj

被预览视频输入对象的句柄

事件

包含以下字段的数据结构:

数据

指定为H-by-W-b数组的当前图像帧,其中H为图像高度,W为图像宽度,如ROIPosition属性中指定的颜色带的数量NumberOfBands财产

决议

控件定义的当前图像宽度和高度的字符向量ROIPosition财产

状态

描述视频输入对象状态的字符向量

时间戳

指定与当前图像帧关联的时间的字符向量,格式为hh: mm: ss:女士

帧速率

字符向量,指定视频输入对象的当前帧率,单位为帧/秒

himage

要在其中显示数据的图像对象的句柄

下面的示例创建一个更新预览窗口函数,该函数在自定义GUI中以文本标签的形式显示每个传入视频帧的时间戳。更新预览窗口函数使用getappdata检索文本标签的句柄uicontrol对象从图像对象中应用程序定义的数据中获取。自定义GUI将此句柄存储到文本标签uicontrol对象——看指定更新预览功能

注意,更新预览窗口函数也通过更新CData图像对象的。

函数mypreview_fcn (obj、事件himage)更新预览窗口函数示例。获取帧的时间戳。tstampstr = event.Timestamp;获取文本标签uicontrol的句柄。ht = getappdata (himage,“HandleToTimestampLabel”);设置文本标签的值。ht。字符串= tstampstr;显示图像数据。himage。CData= event.Data

指定更新预览功能

要使用更新预览窗口函数,请将函数句柄存储在“UpdatePreviewWindowFcn”图像对象的应用程序定义的数据。下面的示例使用setappdata中描述的更新预览窗口函数的函数句柄创建更新预览窗口函数

中创建的简单自定义预览窗口的扩展在自定义gui中预览数据.这个例子添加了三个按钮uicontrol对象到GUI:开始预览,停止预览,关闭预览

此外,为了演示如何使用更新预览窗口函数,示例GUI包括一个文本标签uicontrol对象显示时间戳值。更新预览窗口函数在每次接收到帧时更新这个文本标签。本例使用setappdata来存储文本标签的句柄uicontrol图像对象中应用程序定义的数据中的对象。更新预览窗口函数检索此句柄以更新时间戳显示。

创建一个视频输入对象。vid = videoinput (“winvideo”);创建一个图形窗口。这个例子关闭了默认设置%工具栏和菜单栏在图中。hFig =图(“工具栏”,“没有”,...菜单条的,“没有”,...“NumberTitle”,“关闭”,...“名字”,“我的自定义预览GUI”);设置按钮uicontrol (“字符串”,“开始预览”,...“回调”,“预览(vid)”,...“单位”,“归一化”,...“位置”,[0 0 0.15 .07]);uicontrol (“字符串”,“停止预览”,...“回调”,“stoppreview (vid)”,...“单位”,“归一化”,...“位置”,(。17 0 .15 .07]);uicontrol (“字符串”,“关闭”,...“回调”,“关闭(gcf)”,...“单位”,“归一化”,...“位置”,[0.34 0 .15 .07]);为时间戳创建文本标签hTextLabel = uicontrol (“风格”,“文本”,“字符串”,“时间戳”,...“单位”,“归一化”,...“位置”,[0.85 -。04。15。08]);创建您想要的图像对象%显示视频预览数据。vidRes = vid.VideoResolution;imWidth = vidRes (1);imHeight = vidRes (2);nBands = vid.NumberOfBands;hImage = image(zeros(imHeight, imWidth, nBands));指定包含图像对象的轴的大小%,以显示图像在正确的分辨率和%在图形窗口中居中。figSize =得到(hFig,“位置”);figWidth = figSize (3);figHeight = figSize (4);gca。单位=“像素”;gca。position = [((figWidth - imWidth)/2)...((figHeight - imHeight) / 2)...imWidth imHeight];设置更新预览窗口功能。setappdata (hImage“UpdatePreviewWindowFcn”, @mypreview_fcn);使文本标签句柄可用于更新函数。setappdata (hImage“HandleToTimestampLabel”, hTextLabel);预览(vid hImage);

当您运行此示例时,它将创建如下图所示的GUI。每一次预览接收到一个视频帧,它调用您指定的更新预览窗口函数,该函数更新GUI中的时间戳文本标签。

带有时间戳文本标签的自定义预览GUI

Baidu
map