Отображение видеопотока на рисунке дизайнера приложений

Я занимаюсь разработкой простого приложения в 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 ответ

Хорошо, не очень хорошее решение, но я обнаружил, что одним из способов решения этой проблемы является использование 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

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

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

Другие вопросы по тегам