0

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

我遇到了以下帖子,但到目前为止,我的应用程序无法正常工作:https ://uk.mathworks.com/matlabcentral/answers/357814-how-to-create-a-custom-preview-窗口格式-matlab-网络摄像头

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

  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),它应该在打开 (to 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在应用程序中调用有关,我没有正确指定正确的图像或图像属性,或者我是否应该在应用程序中以较慢的帧速率简单地显示更少的图像。

可以做些什么来解决这个问题?

4

1 回答 1

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

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

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

于 2018-09-18T10:30:49.633 回答