1

我希望能够使用鼠标输入在 Matlab 中实时设置程序中的参数。我在一个图中连续播放视频,我希望能够单击该图中的某些点进行更新。但是,当我调用 时ginput,该图形会停止更新,直到我单击为止。现在我的代码看起来像这样:

while 1
    frame = step(FrameReader);
    image(frame);
    [x,y] = ginput(1);
    pause(0.1);
end

除了使用之外,还有另一种方法可以将鼠标单击侦听器引入图形ginput,或者另一种调用方法ginput可以让电影在后台无缝运行?

4

1 回答 1

1

您可以使用grantnz'ButtonDownFcn'提到的(图形或轴的)属性。当有非实时任务时更方便。ginput

plot首先,请注意,诸如、imshow等高级函数image将重置大多数轴属性,例如'HitTest''ButtonDownFcn'。因此,每次使用此类函数后,您都应该更新所需的轴句柄属性。通常,您应该避免在高频循环中使用此类高级函数以获得更好的性能。

除了grantnz隐含'ButtonDownFcn'的轴设置之外,您还可以使用figure 的请注意,在第二种情况下,您应该关闭轴的可选择性(将轴设置为)。'ButtonDownFcn''HitTest'Off

这是一个虚拟动画,您可以在其中单击动画轴并查看'CurrentPoint'轴的。

% Stop button
uicontrol(...
    'Style','pushbutton', 'String', 'Stop',...
    'Units','Normalized', 'Position', [0.4 0.1 0.2 0.1],...
    'Callback', 'run = 0;');

% Axes
ax = axes(...
    'Units','Normalized',...
    'OuterPosition', [0 0.2 1 0.8]);

run = 1;
t = 0;
while run
    t = t + 0.01; x = t:0.01:t+2;
    h = plot(ax, x, sin(x));
    set(ax, 'ButtonDownFcn', 'get(ax, ''CurrentPoint'')');
    xlim([x(1) x(end)]); ylim([-1 1]);
    pause(0.01);
end

请注意'ButtonDownFcn'每次更新后plot

也可以获取'CurrentPoint'图形的 ,如果是这样,您应该Normalized为图形设置单位以获取 的归一化位置'CurrentPoint'

于 2013-07-04T01:50:49.793 回答