matlab - 流式传输网络摄像头时图形不断闪烁

matlab - figure keeps blinking when streaming webcam

我首先创建了一个图形来将网络摄像头图像传输到它上面。然后我在从网络摄像头流式传输时在图形上创建了一个 3D 轴。请注意,网络摄像头帧流并未设置在 3D 轴内,而是设置在图本身的 3D 轴外。问题是由于 uistack(ah,'bottom') 功能,当我流式传输网络摄像头时,数字一直在闪烁。我需要这个函数来将 3D 轴 ah 保持在流图形背景 frame 之前。

如您所见,我正在使用网络摄像头播放苹果。由于 uistack(ah,'bottom') 函数,您还可以看到 3D 轴位于背景的前面。如果我不使用这个功能,3D轴会隐藏在背景后面。

% turn on webcam
camList = webcamlist;
cam = webcam(camList{1});

% stream webcam
while(1)
    frame = snapshot(cam);
    ah = axes('unit','normalized','position',[0 0 1 1]);
    imagesc(frame)
    drawnow
    set(ah,'handlevisibility','off','visible','off','Clipping','off')
    uistack(ah,'bottom')
end

我解决了问题。

您需要定义两个轴:(i) 一个用于流图像 az 和 (ii) 另一个用于静态图像 ah outside 的循环。此外,将 uistack 函数 放在 之外,因为告诉程序在每个循环中将 ah 保持在 az 轴的顶部是多余的。

camList = webcamlist;
cam = webcam(camList{1});

hold on
az = axes('unit','normalized','position',[0 0 1 1]);
ah = axes('unit','normalized','position',[0 0 1 1]);
uistack(ah,'top')

while(1)
    frame = snapshot(cam);
    imagesc(az,frame)
    drawnow
end