Предварительный просмотр данных

Введение

После подключения MATLAB® к устройству сбора изображений можно просмотреть видеопоток в режиме реального времени с помощью окна Video Preview. Предварительный просмотр данных видео может помочь вам убедиться, что захваченное изображение удовлетворительно.

Для примера, просматривая предпросмотр, можно проверить, что подсветки и особое внимание верны. Если вы изменяете характеристики изображения, с помощью свойств объекта входа видео и объекта источника видео, изображение, отображаемое в окне Video Preview, изменяется, отражая новые настройки свойств.

В следующих разделах приведены дополнительные сведения об использовании окна Video Preview.

Вместо использования окна Video Preview тулбокса, можно отобразить поток предварительного просмотра видео в любой Дескриптивной графике® объект изображения, который вы задаете. Таким образом можно включить предварительный просмотр видео в графический интерфейс пользователя собственного создания. В следующих разделах описывается эта возможность.

Открытие окна предварительного просмотра видео

Чтобы открыть окно Video Preview, используйте preview функция. В окне Video Preview отображается видеопоток с устройства. Вы можете открыть только одно окно предварительного просмотра для каждого устройства. Если используется несколько устройств, можно одновременно открыть несколько окон предварительного просмотра.

В следующем примере создается объект входа видео, а затем открывается окно Video Preview для объекта входа видео.

vid = videoinput('winvideo');
preview(vid);

Следующий рисунок показывает окно Video Preview, созданное в этом примере. Окно Video Preview отображает видеопоток в реальном времени. Размер изображения для предварительного просмотра определяется значением ROIPosition объекта входа видео свойство. Окно Video Preview отображает данные видео с 100% -ным увеличением.

В дополнение к изображению предварительного просмотра окно Video Preview включает в себя информацию об изображении, такую как временная метка видеокадра, разрешение видео, частота систем координат и текущее состояние объекта входа видео.

Примечание

Поскольку форматы видео обычно выражают разрешение как ширину по высоте, окно Video Preview выражает размер системы координат изображения как столбец за строкой, а не стандартный формат строка за столбцом MATLAB.

Примечание

Окно Image Acquisition Toolbox™ Preview и окно Preview, встроенное в Image Acquisition Tool, поддерживают отображение до 16-битных данных изображения. Окно Preview было спроектировано, чтобы показать только 8-битные данные, но многие камеры возвращают 10-, 12-, 14- или 16-битные данные. Окно Preview отображения поддерживает эти камеры более высокой битовой глубины. Однако большие битовые данные масштабируются до 8-битовых с целью отображения предварительно просмотренных данных. Чтобы захватить данные изображения в окне Preview на его полной битовой глубине для полутоновых изображений, установите PreviewFullBitDepth свойство к 'on'.

Остановка предварительного просмотра видеопотока

Когда вы используете preview функция для начала предварительного просмотра данных изображения в окне Video Preview отображается представление видеопотока, поступающего с устройства. Чтобы остановить обновление живого видеопотока, вызовите stoppreview функция.

Этот пример создает объект входа видео и открывает окно Video Preview. Затем пример вызывает stoppreview функция на этом объекте входа видео. Окно Video Preview останавливает обновление отображаемого изображения и останавливает обновление временной метки. Состояние, отображаемое в окне Video Preview, также изменяется, что указывает на остановку предварительного просмотра.

vid = videoinput('winvideo');
preview(vid)
stoppreview(vid)

Чтобы перезапустить видеопоток в окне Video Preview, вызовите preview снова на том же видео входа объекта.

preview(vid)

Закрытие окна предварительного просмотра видео

Чтобы закрыть определенное окно Video Preview, используйте closepreview функция, задающая объект входа видео как аргумент. Вам не нужно останавливать прямой видеопоток, отображаемый в окне Video Preview, перед его закрытием.

closepreview(vid)

Чтобы закрыть все открытые окна Video Preview, используйте closepreview функция без аргументов.

closepreview

Примечание

При вызове без аргумента closepreview функция закрывает только окна Video Preview. The closepreview функция не закрывает никаких других окон рисунка, в которых вы направляли видеопоток для предварительного просмотра. Для получения дополнительной информации см. раздел «Предварительный просмотр данных в пользовательских графических интерфейсах пользователя».

Предварительный просмотр данных в пользовательских графических интерфейсах пользователя

Вместо использования окна Video Preview тулбокса можно использовать preview функция для направления live видеопотока к любой Дескриптивной графике изображения объекту. Таким образом, вы можете включить возможность предварительного просмотра тулбокса в графический интерфейс пользователя вашего собственного создания. (Вы также можете выполнить пользовательскую обработку, когда отображается живое видео. Для получения дополнительной информации смотрите Выполнение Пользовательской Обработки Предварительно Просмотренных Данных.)

Чтобы использовать эту возможность, создайте объект изображения и затем вызовите preview функция, задающая указатель на объект изображения в качестве аргумента. The preview функция выводит live видеопоток в заданный вами объект изображения.

В следующем примере создается окно рисунка, а затем создается объект изображения на рисунке, такого же размера, как и видеокадры. Затем пример вызывает preview функция, задающая указатель на объект изображения.

% Create a video input object.
vid = videoinput('winvideo');

% Create a figure window. This example turns off the default
% toolbar, menubar, and figure numbering.

figure('Toolbar','none',...
       'Menubar', 'none',...
       'NumberTitle','Off',...
       'Name','My Preview Window');

% Create the image object in which you want to display 
% the video preview data. Make the size of the image
% object match the dimensions of the video frames.

vidRes = vid.VideoResolution;
nBands = vid.NumberOfBands;
hImage = image( zeros(vidRes(2), vidRes(1), nBands) );

% Display the video data in your GUI.

preview(vid, hImage);

При запуске этого примера создаётся графический интерфейс пользователя, показанная на следующем рисунке.

Пользовательский предварительный просмотр

Выполнение пользовательской обработки предварительно просматриваемых данных

Когда вы задаете объект изображения к preview функция (см. Предварительный просмотр данных в пользовательских графические интерфейсы пользователя), вы можете опционально также задать функцию, которая preview выполняется каждый раз, когда он получает систему координат изображения.

Чтобы использовать эту возможность, выполните следующие действия:

  1. Создайте функцию, которую вы хотите выполнить для каждой системы координат изображения, названную функцией окна предварительного просмотра обновления. Для получения дополнительной информации об этой функции смотрите Создание функции окна предпросмотра обновления.

  2. Создайте объект изображения.

  3. Сконфигурируйте значение 'UpdatePreviewWindowFcn' объекта изображения данные, заданные приложением, которые будут указателем на функцию предварительного просмотра обновлений. Дополнительные сведения см. в разделе Установка функции предварительного просмотра обновлений.

  4. Вызовите preview функция, задающая указатель на объект изображения как аргумент.

Примечание

Если вы задаете функцию окна предварительного просмотра обновлений, в сложение с любой обработкой, которую выполняет ваша функция, она должна отобразить данные видео в объекте изображения. Вы можете сделать это, обновив CData объекта изображения с входящими видеокадрами. Для получения некоторых инструкций по эффективности для обновления данных, отображаемых в объекте изображения, смотрите Техническое решение 1-1B022.

Создание функции окна Update Preview

Когда preview вызывает заданную функцию окна предварительного просмотра обновлений, она передает вашей функции следующие аргументы.

Аргумент

Описание

obj

Указатель на вход видео, который просматривается

event

Структура данных, содержащая следующие поля:

Data

Текущая система координат изображения, заданный как массив H-на-W-на-B, где H - высота изображения, а W - ширина изображения, как задано в ROIPosition свойство, и B - количество цветовых полос, заданное в NumberOfBands свойство

Resolution

Вектор символов, задающий текущую ширину и высоту изображения, определяемую ROIPosition свойство

Status

Вектор символов, описывающий состояние объекта входа видео

Timestamp

Вектор символов, задающий время, сопоставленное с текущей системой координат изображения, в формате hh:mm:ss:ms

FrameRate

Вектор символов, задающий текущую частоту систем координат объекта входа видео в системах координат в секунду

himage

Указатель на объект изображения, в котором должны отображаться данные

В следующем примере создается функция окна предварительного просмотра обновлений, которая отображает временную метку каждого входящего видеокадра в качестве текстовой метки в пользовательском графическом интерфейсе пользователя. Функция окна предварительного просмотра обновлений использует getappdata для извлечения указателя на текстовую метку uicontrol объект из данных, заданных приложением, в объекте изображения. Пользовательский графический интерфейс пользователя хранит этот указатель на текстовой метке uicontrol - см. «Задание функции предварительного просмотра обновлений».

Обратите внимание, что функция окна предварительного просмотра обновления также отображает данные видео путем обновления CData объекта изображения.

function mypreview_fcn(obj,event,himage)
% Example update preview window function.

% Get timestamp for frame.
tstampstr = event.Timestamp;

% Get handle to text label uicontrol.
ht = getappdata(himage,'HandleToTimestampLabel');

% Set the value of the text label.
ht.String = tstampstr;

% Display image data.
himage.CData = event.Data

Установка функции предварительного просмотра обновлений

Чтобы использовать функцию окна предпросмотра обновления, храните указатель на функцию к функции в 'UpdatePreviewWindowFcn' данные объекта изображения, заданные приложением. В следующем примере используется setappdata функция для конфигурирования данных, заданных приложением, в указатель на функцию окна предварительного просмотра обновления, описанную в разделе Создание функции окна предварительного просмотра обновления.

Этот пример расширяет простое пользовательское окно предварительного просмотра, созданное в Previewing Data in Custom GUIs. Этот пример добавляет три кнопки uicontrol объекты графического графического интерфейса пользователя: «Предварительный просмотр запуска», «Предварительный просмотр остановки» и «Предварительный просмотр закрытия».

В сложение, чтобы проиллюстрировать использование функции окна предварительного просмотра обновлений, пример графического интерфейса пользователя включает в себя текстовую метку uicontrol объект для отображения значения временной метки. Функция окна предварительного просмотра обновляет эту текстовую метку каждый раз, когда получена рамка. В примере используются setappdata для хранения указателя на текстовую метку uicontrol объект в данных, заданных приложением, в объекте изображения. Функция окна предварительного просмотра обновлений извлекает этот указатель для обновления отображения временных меток.

% Create a video input object.
vid = videoinput('winvideo');

% Create a figure window. This example turns off the default
% toolbar and menubar in the figure.
hFig = figure('Toolbar','none',...
       'Menubar', 'none',...
       'NumberTitle','Off',...
       'Name','My Custom Preview GUI');

% Set up the push buttons
uicontrol('String', 'Start Preview',...
    'Callback', 'preview(vid)',...
    'Units','normalized',...
    'Position',[0 0 0.15 .07]);
uicontrol('String', 'Stop Preview',...
    'Callback', 'stoppreview(vid)',...
    'Units','normalized',...
    'Position',[.17 0 .15 .07]);
uicontrol('String', 'Close',...
    'Callback', 'close(gcf)',...
    'Units','normalized',...
    'Position',[0.34 0 .15 .07]);

% Create the text label for the timestamp
hTextLabel = uicontrol('style','text','String','Timestamp', ...
    'Units','normalized',...
    'Position',[0.85 -.04 .15 .08]);

% Create the image object in which you want to
% display the video preview data.
vidRes = vid.VideoResolution;
imWidth = vidRes(1);
imHeight = vidRes(2);
nBands = vid.NumberOfBands;
hImage = image( zeros(imHeight, imWidth, nBands) );

% Specify the size of the axes that contains the image object
% so that it displays the image at the right resolution and
% centers it in the figure window.
figSize = get(hFig,'Position');
figWidth = figSize(3);
figHeight = figSize(4);
gca.unit = 'pixels';
gca.position = [ ((figWidth - imWidth)/2)... 
               ((figHeight - imHeight)/2)...
               imWidth imHeight ];

% Set up the update preview window function.
setappdata(hImage,'UpdatePreviewWindowFcn',@mypreview_fcn);

% Make handle to text label available to update function.
setappdata(hImage,'HandleToTimestampLabel',hTextLabel);

preview(vid, hImage);

При запуске этого примера создаётся графический интерфейс пользователя, показанная на следующем рисунке. Каждый временной preview получает видеокадр, вызывает заданную вами функцию окна предварительного просмотра обновлений, которая обновляет текстовую метку временной метки в графическом интерфейсе пользователя.

Пользовательский графический интерфейс пользователя предварительного просмотра с текстовой меткой временной метки