Отображение видеопотока на рисунке дизайнера приложений
Я занимаюсь разработкой простого приложения в App Designer, и я изо всех сил пытался включить видеопоток с веб-камеры.
Я сталкивался со следующим постом, но до сих пор мне не удалось заставить работать мое приложение: https://uk.mathworks.com/matlabcentral/answers/357814-how-to-create-a-custom-preview-window-for-matlab-webcam
Пока что я делаю:
Создание объекта оси в графическом интерфейсе. Это вторая цифра, поэтому она автоматически помечается как
app.UIAxes2
,Включая следующие команды в мою функцию запуска:
app.Camera = webcam; %('USB2.0 PC CAMERA') image(app.UIAxes2,zeros(size(snapshot(app.Camera)),'uint8'));
где app.Camera
это мой объект камеры (я включил это свойство в класс), и вторая команда должна изменить размер изображения до размера видеопотока камеры. Я могу ошибаться по этому поводу.
Создание переключателя (
CameraStreamSwitch
), который должен показывать видеопоток при включении (вStart
).Создание следующей функции в коде приложения, которая активируется при каждом нажатии переключателя:
% 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
Вы можете изменить частоту кадров, изменив время паузы.
Если у вас есть лучшие решения, пожалуйста, дайте мне знать!