Restricting getrect boundaries (image processing)

1 次查看(过去 30 天)
When using the getrect function, is there any way to restrict the selected rectangle so that it cannot be dragged outside the borders of the image?
Normally it is draggable outside the image frame:
In most situations, being even slightly outside the image frame leads to errors. To fix this I used several if statements to ensure we enclose the appropriate pixels:
X=imread('office_5.jpg');
imshow(X)
rect = getrect; % [x, y, width, height]
x1 =rect(1);
x2 = x1 + rect(3);
y1 =rect(2);
y2 = y1 + rect(4);
%--------------------------------------------------
% Selected rectangle completely outside the image
if ((x1 > size(X,2)) || (x2 < 0) || (y1 > size(X,1)) || (y2 < 0))
error('No pixels selected.');
rect = [];
end
% Leftmost edge outside the image
if (x1 < 1)
x1 = 1;
end
% Rightmost edge outside the image
if (x2 > size(X,2))
x2=size(X,2);
end
% Lower edge outside the image
if y1 < 1
y1 = 1;
end
% Upper edge outside the image
if y2 > size(X,1)
y2 = size(X,1);
end
But I think there must be a simpler way to do this.
Any suggestions would be greatly appreciated.

采纳的回答

Matt J
Matt J 2018-1-15
编辑:Matt J 2018-1-15
It would be better to use imrect() instead in conjunction with makeConstrainToRectFcn,
fcn = makeConstrainToRectFcn('imrect',get(gca,'XLim'),get(gca,'YLim'));
setPositionConstraintFcn(imrect(),fcn);

更多回答(0 个)

类别

Help CenterFile Exchange 中查找有关 Images 的更多信息

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by