预览实时数据从图像采集设备
简介
在你连接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中预览数据),您还可以选择指定一个函数预览
每次接收到图像帧时执行。
要使用此功能,请遵循以下步骤:
创建您希望为每个图像帧执行的函数,称为更新预览窗口函数。有关此函数的信息,请参见创建更新预览窗口函数.
创建一个图像对象。
配置图像对象的值
“UpdatePreviewWindowFcn”
应用程序定义的数据作为更新预览窗口函数的函数句柄。有关更多信息,请参见指定更新预览功能.调用
预览
函数,将图像对象的句柄指定为参数。
请注意
如果指定了更新预览窗口函数,除了函数执行的任何处理之外,它还必须在图像对象中显示视频数据。可以通过更新CData
带有传入视频帧的图像对象的。有关更新图像对象中显示的数据的一些性能指导原则,请参见技术解决方案1-1B022.
创建更新预览窗口函数
当预览
调用您指定的更新预览窗口函数,它将以下参数传递给您的函数。
论点 |
描述 |
|
---|---|---|
|
被预览视频输入对象的句柄 |
|
|
包含以下字段的数据结构: |
|
|
指定为H-by-W-b数组的当前图像帧,其中H为图像高度,W为图像宽度,如 |
|
|
控件定义的当前图像宽度和高度的字符向量 |
|
|
描述视频输入对象状态的字符向量 |
|
|
指定与当前图像帧关联的时间的字符向量,格式为 |
|
|
字符向量,指定视频输入对象的当前帧率,单位为帧/秒 |
|
|
要在其中显示数据的图像对象的句柄 |
下面的示例创建一个更新预览窗口函数,该函数在自定义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