我希望能够使用鼠标输入在Matlab中实时设置程序中的参数。我在一个图中连续播放视频,我希望能够点击该图中的某些点进行更新。但是,当我调用ginput
时,数字会停止更新,直到我点击。现在我的代码看起来像这样:
while 1
frame = step(FrameReader);
image(frame);
[x,y] = ginput(1);
pause(0.1);
end
是否有另一种方法可以将鼠标点击监听器引入图形而不是使用ginput
,或者使用另一种方式调用ginput
以允许电影在后台无缝运行?
答案 0 :(得分:1)
您可以使用grantnz所述的'ButtonDownFcn'
属性(图或轴)。当有非实时任务时,ginput
会更方便。
首先,请注意plot
,imshow
,image
等高级函数会重置大多数轴属性,例如'HitTest'
和{{ 1}}。因此,每次使用此类功能后,您应更新所需的轴处理属性。通常,您应该避免在高频环路中使用这种高级功能以获得更好的性能。
除了设置grantnz暗示的 'ButtonDownFcn'
轴之外,您还可以使用图中的 'ButtonDownFcn'
。 注意在第二种情况下,您应该关闭轴的可选性(将轴'ButtonDownFcn'
设置为'HitTest'
)。
这是一个虚拟动画,您可以在其中单击动画轴并查看轴的Off
。
'CurrentPoint'
注意每次plot
之后% 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'
,如果是这样,您应该为数字设置'CurrentPoint'
单位以获得Normalized
的标准化位置。