使用以下代码,我可以轻松地在给定图像上绘制一个可拖动的矩形。
figure;
imshow('image.png');
h = imrect;
p = wait(h); % get the rect position
rectangle('Position', p, 'LineWidth',2, 'EdgeColor','r'); % draw 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
答案 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