在App Designer图中显示视频流

时间:2018-09-04 07:33:57

标签: matlab video webcam real-time-updates matlab-app-designer

我正在使用App Designer开发一个简单的应用程序,并且一直在努力包含来自网络摄像头的视频流。

我遇到过以下帖子,但到目前为止,我的应用无法正常运行:https://uk.mathworks.com/matlabcentral/answers/357814-how-to-create-a-custom-preview-window-for-matlab-webcam

到目前为止,我正在做的是:

  1. 在GUI中创建轴对象。这是第二个数字,因此它自动标记为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. 在App代码中创建以下功能,只要按下开关,该功能就会激活:

    % 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有关,我没有正确指定正确的图像或图像属性,还是我是否应该在应用程序中以较低的帧速率显示较少的图像。< / p>

该如何解决?

1 个答案:

答案 0 :(得分:0)

好的,不是一个很好的解决方案,但是我发现解决此问题的一种方法是使用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

您可以通过更改暂停时间来更改帧频。

如果您有更好的解决方案,请告诉我!