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

Введение

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

Например, путем рассмотрения предварительного просмотра, можно проверить, что подсветка и особое внимание правильны. Если вы изменяете характеристики изображения, при помощи объекта ввода видео и свойств объектов источника видеосигнала, изображение, отображенное в Окне просмотра видео, изменяется, чтобы отразить новые настройки свойства.

Следующие разделы предоставляют больше информации об использовании Окна просмотра видео.

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

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

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

Следующий пример создает объект ввода видео и затем открывает Окно просмотра видео для объекта ввода видео.

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

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

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

Примечание

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

Примечание

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

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

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

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

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

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

preview(vid)

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

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

closepreview(vid)

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

closepreview

Примечание

Когда названо без аргумента, closepreview функционируйте только закрывает Окна просмотра видео. closepreview функция не закрывает никакие другие окна рисунка, в которых вы направили видеопоток предпросмотра в реальном времени. Для получения дополнительной информации смотрите Предварительно просматривающие Данные в Пользовательских графический интерфейсах пользователя.

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

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

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

Следующий пример создает окно рисунка и затем создает объект изображения на рисунке, тот же размер как видеокадры. Пример затем вызывает 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 Техническое решение.

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

Когда 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 функция, чтобы сконфигурировать эти заданные приложением данные к указателю на функцию к функции окна предварительного просмотра обновления, описанной в Создании Функции Окна Предварительного просмотра Обновления.

Этот пример расширяет простое пользовательское окно предварительного просмотра, созданное в Предварительно просматривании Данных в Пользовательских графический интерфейсах пользователя. Этот пример добавляет три кнопки 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 получает видеокадр, он вызывает функцию окна предварительного просмотра обновления, которую вы задали, который обновляет текстовую метку метки времени в графический интерфейсе пользователя.

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