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

Введение

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

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

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

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

Примечание

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

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

Чтобы открыть Окно просмотра видео, используйте функцию 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-битному в целях отображения предварительно просмотренных данных. Если вам нужно полное разрешение данных, используйте функции getdata или getsnapshot.

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

Когда вы используете функцию 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

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

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