Отображение видеопотока на рисунке дизайнера приложений - PullRequest
0 голосов
/ 04 сентября 2018

Я занимаюсь разработкой простого приложения в App Designer, и я изо всех сил пытался включить видеопоток с веб-камеры.

Я сталкивался со следующим постом, но до сих пор мне не удалось заставить мое приложение работать: https://uk.mathworks.com/matlabcentral/answers/357814-how-to-create-a-custom-preview-window-for-matlab-webcam

Пока что я делаю:

  1. Создание объекта оси в графическом интерфейсе. Это вторая цифра, поэтому она автоматически помечается как app.UIAxes2.

  2. Включение следующих команд в мою функцию запуска:

    app.Camera = webcam;  %('USB2.0 PC CAMERA')
    image(app.UIAxes2,zeros(size(snapshot(app.Camera)),'uint8'));
    

где app.Camera - это объект моей камеры (я включил свойство в класс), а вторая команда должна изменить размер изображения до размера видеопотока камеры. Я могу ошибаться по этому поводу.

  1. Создание переключателя (CameraStreamSwitch), который должен отображать видеопоток при включении (до Start).

  2. Создание в коде приложения следующей функции, которая активируется при каждом нажатии переключателя:

    % Value changed function: CameraStreamSwitch
    function CameraStreamSwitchValueChanged(app, event)
       while strcmp(app.CameraStreamSwitch.Value,'Start')
           im = image(app.UIAxes_2,zeros(size(snapshot(app.Camera)),'uint8'));
       preview(app.Camera,im);
       end
    end
    

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

Что можно сделать, чтобы решить эту проблему?

1 Ответ

0 голосов
/ 18 сентября 2018

ОК, не очень хорошее решение, но я обнаружил, что одним из способов решения этой проблемы является использование imshow.

Код, который работает следующим образом:

% Value changed function: CameraStreamSwitch
function CameraStreamSwitchValueChanged(app, event)
    while strcmp(app.CameraStreamSwitch.Value,'Start')
          img = snapshot(app.Camera);
          imshow(img,'Parent',app.UIAxes2);
          pause(0.1);
    end
 end

Вы можете изменить частоту кадров, изменив время паузы.

Если у вас есть лучшие решения, пожалуйста, дайте мне знать!

...