在图像上绘制多个可拖动的矩形?

时间:2014-02-17 10:22:44

标签: matlab draggable draw drawrect

使用以下代码,我可以轻松地在给定图像上绘制一个可拖动的矩形。

figure; 
imshow('image.png');

h = imrect;
p = wait(h);                                              % get the rect position
rectangle('Position', p, 'LineWidth',2, 'EdgeColor','r'); % draw here

enter image description here

问题是:如何在图像上绘制多个可拖动的矩形?此外,预先知道矩形的数量

P.S。如果我已经绘制了矩形的数量,那将变得更容易。例如,如果我想绘制2个rectangels,则以下代码将起作用,即只放置wait()的多个:

figure; 
imshow('image.png');

h = imrect;
p = wait(h);                                              % get the rect position
rectangle('Position', p, 'LineWidth',2, 'EdgeColor','r'); % draw here
p2 = wait(h);                                             % get the rect position
rectangle('Position', p2, 'LineWidth',2, 'EdgeColor','r'); % draw here

1 个答案:

答案 0 :(得分:3)

一种方法是将位置采集包装在while循环中,并添加某种uicontrol来指示何时完成。在这种情况下,它只是一个按钮,在您完成时删除imrect句柄。如果删除句柄,则h不再有效,因此isvalid会停止while循环。 ~isempty用作p的最后返回值为空。

请注意,此代码每次都会覆盖p,因此如果您想记录所有位置,而不仅仅是绘制矩形,则需要将其添加到其中。

figure
imshow(I)
h = imrect

uicontrol('Style', 'pushbutton', 'String', 'Done',...
        'Position', [20 20 50 20],...
        'Callback', 'delete(h)');

while isvalid(h)
  p = wait(h);          
  if ~isempty(p)                                    
      rectangle('Position', p, 'LineWidth',2, 'EdgeColor','r');
  end
end