我一直试图在我的情节中添加一个标记,但到目前为止我都失败了。这是我正在处理的一段代码:
v = evalin('base','a matrix in my workspace which is 1000 by 1');
plot(v, 'Parent', handles.axes2);
for frames = 2:handles.frameCount-1
axes(handles.axes1);
imshow(handles.videoStruct(frames).cdata);
set(handles.text3, 'String', num2str(frames));
drawnow;
pause(1/handles.videoObject.FrameRate);
axes(handles.axes2);
hold on;
plot(frames, v(frames), '.r');
end
我的gui中有两个轴。 axes1用于显示视频,没有问题。在视频显示之前的轴2中绘制了“v”,我想为它添加一个标记,它将根据for循环所在的帧“移动”。
最后一个图(帧,v(帧)......线有效,但在轴2上绘制点。
我有两个选择:
当循环移动到下一次迭代时,以某种方式删除最后一个标记图。实际上我不想这样做,因为我将来会实现一个滑块来控制该标记。
在绘图上创建标记的更简单方法,无需重新绘制标记:)
从现在开始非常感谢...
答案 0 :(得分:1)
试试这个。基本上不要在循环内调用plot。它带来了一堆很慢的开销。把它称之为循环之外的一切。然后在里面使用手柄更新标记x& ydata,图像CData和文本。
v = evalin('base','a matrix in my workspace which is 1000 by 1');
plot(handles.axes2. v);
hold(handles.axes2,'on');
%USE these handles in the loop
markH = plot(handles.axes2, 1, v(1), '.r'); %Initial plot and get handle toLine.
imH = imshow(handles.videoStruct(1).cdata, 'Parent', handles.axes1);
for frames = 2:handles.frameCount-1
% Do no replot just set x, y, & cdata, etc.
set(markH,'XData',frames,'YData',v(vframes))
set(imH, 'CData',handles.videoStruct(frames).cdata);
set(handles.text3, 'String', num2str(frames));
drawnow;
pause(1/handles.videoObject.FrameRate);
end
注意:我假设第一帧&是index
1,即使你的循环开始于2.但是,如果这不正确,那么你可以在循环外的调用中轻松换出1s 2s。