如何在MATLAB中绘制实时信号?

如何在MATLAB中绘制实时信号?,matlab,video,plot,Matlab,Video,Plot,我正在构建一个微笑检测系统,我需要绘制微笑的概率(来自视频输入),如图中右侧的图表 如何在MATLAB中实现这一点 笔记 我目前正在显示带有OpenCV和IntraFace默认代码的视频帧,看起来像这样: cf = 0; % Current Frame. % create a figure to draw upon S.fh = figure('units','pixels',... 'position',[100 150 frame_w frame_h],...

我正在构建一个微笑检测系统,我需要绘制微笑的概率(来自视频输入),如图中右侧的图表

如何在MATLAB中实现这一点

笔记 我目前正在显示带有OpenCV和IntraFace默认代码的视频帧,看起来像这样:

cf = 0; % Current Frame.
% create a figure to draw upon
S.fh = figure('units','pixels',...
              'position',[100 150 frame_w frame_h],...
              'menubar','none',...
              'name','Smile Detector',...              
              'numbertitle','off',...
              'resize','off',...
              'renderer','painters');

% create axes
S.ax = axes('units','pixels',...  
            'position',[1 1 frame_w frame_h],...
            'drawmode','fast');

set(S.fh,'KeyPressFcn',@pb_kpf);          

S.im_h = imshow(zeros(frame_h,frame_w,3,'uint8'));
hold on;
S.frame_h = text(50,frame_h-50,['Frame ' int2str(cf)] , 'fontsize', 15, 'Color' , 'c');

while true && ~stop_pressed
  tic;
  im = cap.read;  
  cf = cf + 1;        
  if isempty(im), 
    warning('EOF'); 
    break ;
  end

  set(S.im_h,'cdata',im); % update frame
  set(S.frame_h , 'string' ,['Frame ' int2str(cf)]);  
  do_something_with_frame(im);

  if isempty(output.pred) % if lost/no face, delete all drawings      
    if drawed, delete_handlers(); end
  else % face found       
    update_GUI(); 
  end
drawnow;
end

close;

end
我想在视频中添加一个实时/移动的图形。该图将显示0和1之间的单个值(概率)。而且它应该随着每一个新的帧而更新,因此情节应该随着视频的流动而“流动”

我试过什么
我尝试创建一个新的图形,就像代码中的
S
。但我不能参与其中。我还可以将实时图形添加到同一个图形中(
S.fh
),最好是在场景下。

使用linkdata和refreshdata将在有新数据时刷新图形打印

    %some pretend data
    pX1 = rand;
    pX2 = 1-pX1;
    p = [pX1,pX2];
    bar(p)

    %link the data to the plot
    linkdata on

    for i=1:100
       pX1 = rand;
       pX2 = 1-pX1;
       p = [pX1,pX2];
       %refresh the linked data and draw
       refreshdata
       drawnow
    end


希望它能帮上忙……

通常,只要用名字或电话号码呼叫一个数字,你就可以用它重新绘制。如图(1)所示;等等图(x,y,'o');imshow(Img);拖延。通过在循环中调用这一行并更改(x,y),您的点将被添加。对不起,在您的情况下不需要imshow(Img),我复制粘贴我所做的对不起。但在这种情况下,绘图将位于图像下方,或者如果点位于图像边界之外,则将显示它们。因此,如果您使用GUI,只需获取您创建的轴并更新绘图。谢谢@AlexandreBizeau!