我的目标是不断绘制位置&使用MATLAB将相机相对于标记的方向。
要绘制三件事。(1)相机(2)所有圆点(3)原点' *' 相机和点都将在每个帧中移动。我在静态图中绘制了所有这三个东西,即使用hold on。如附图所示。
现在我想在与数值变化相同的图中连续(实时)绘制它们。到目前为止,我只能动态更新这些内容中的一个,即某些随机值的圆点。如果我添加另一个情节,它会发生冲突。请你告诉我如何在同一图和plotCamera中更新多个图。
hF = figure;
hAx = gca;
im_pt_2world=rand(3,3);
x_o=im_pt_2world(1,1); y_o=im_pt_2world(1,2); %origin of the calibrated world points
x_ip=im_pt_2world(:,1); y_ip=im_pt_2world(:,2);
hpoints = plot3(x_ip, y_ip,zeros(size(im_pt_2world, 1),1),'ro');
% I added the "ishandle" so the program will end in case u closed the figure
while (1) & ishandle(hpoints)
%instead of using plot I directly change the data in the line
% this is faster the plot if only because you don't need to reedefine the limits and labels...
im_pt_2world=rand(3,3);
x_ip=im_pt_2world(:,1); y_ip=im_pt_2world(:,2);
set(hpoints,'ydata',y_ip);
set(hpoints,'xdata',x_ip);
drawnow %updates the display
end
答案 0 :(得分:1)
plotCamera
函数(计算机视觉系统工具箱)返回图形对象的句柄,您可以通过编程方式进行操作。更改对象的属性(例如Location
和Orientation
)会在图中移动相机。 plotCamera
的帮助示例显示了如何让相机在一个圆圈中飞行:
% Plot a camera pointing along the Y-axis
R = [1 0 0;
0 0 -1;
0 1 0];
% Setting opacity of the camera to zero for faster animation.
cam = plotCamera('Location', [10 0 20], 'Orientation', R, 'Opacity', 0);
% Set view properties
grid on
axis equal
axis manual
% Make the space large enough for the animation.
xlim([-15, 20]);
ylim([-15, 20]);
zlim([15, 25]);
% Make the camera fly in a circle
for theta = 0:pi/64:10*pi
% Rotation about cameras y-axis
T = [cos(theta) 0 sin(theta);
0 1 0;
-sin(theta) 0 cos(theta)];
cam.Orientation = T * R;
cam.Location = [10 * cos(theta), 10 * sin(theta), 20];
drawnow();
end
如果您真的想玩得开心,可以在点击相机时提供要调用的功能句柄。例如,该功能可以显示相机看到的图像。