To retrieve height and width of more than one rectangle rectangle drawn and store it in a matrix

조회 수: 1 (최근 30일)
Hi Guys I am drawing rectangle in an image using following code
[L Ne]=bwlabel(BW2);
propied=regionprops(L,'BoundingBox');
hold on
for x=1:size(propied,1)
rectangle('Position',propied(x).BoundingBox,'EdgeColor','g','LineWidth',2)
end
hold off
Now if there are two rectangles formed in my image and I want to know their height, width, start and end point and store it in a matrix. (data Of both the rectangles)
I dont know how to do that. plz help me.
  댓글 수: 2
Jan
Jan 2011년 4월 4일
How did you try to use FINDALL and what exactly means "didn't work"? Please post the code and the error message or description of the different between the results and your expectations.

댓글을 달려면 로그인하십시오.

답변 (2개)

Jan
Jan 2011년 4월 4일
hold on
RectH = zeros(1, 10);
for x = 1:10
rectangle('Position', (rand(1, 4) * 0.5), ...
'Tag', 'myRect');
end
Different methods to get the Positions:
Use the vector of handles, if it is available already:
PosList = get(RectH, 'Position');
If you have the AXES handle only:
RectH = findobj(allchild(AxesH), 'flat', 'Type', 'rectangle');
Or:
RectH = findobj(allchild(AxesH), 'flat', 'Tag', 'myRect');
If you have the FIGURE handle only:
RectH = findobj(allchild(FigH), 'Tag', 'myRect');

Karan Ratnaparkhi
Karan Ratnaparkhi 2011년 4월 4일
Hey Jan Simon there are 3 rectangles formed in my image and i hav 2 get d positions of each of them and store the whole data in an array. Findobj finds d first rectangle it encounters and even if i am running a for loop for all rectangles i am getting position of first rectangle only, in array! Is der ny method to increment findobj to go for the next rectangle?
  댓글 수: 1
Karan Ratnaparkhi
Karan Ratnaparkhi 2011년 4월 4일
After the rectangles are drawn using above code my nxt code is
Q=zeros(Ne,4);
for i=1:Ne
rects = findobj(allchild(gca), 'flat', 'Type', 'rectangle');
%rects = findall(gcf,'type','rectangle');
for K = 1:length(rects)
for x=1:Ne
for y=1:4
rpos = get(rects(K),'Position');
fprintf(1, 'Rectangle #%d: height %g, width %g at (%g,%g)\n', ...
rpos(3), rpos(4), rpos(1), rpos(2));
Q(x,y)=rpos(y);
end
end
end
end
Q(1:Ne,1:4)
Bt i am getting value in Q as:
19.5000 9.5000 2.0000 1.0000
19.5000 9.5000 2.0000 1.0000
19.5000 9.5000 2.0000 1.0000
19.5000 9.5000 2.0000 1.0000

댓글을 달려면 로그인하십시오.

제품

Community Treasure Hunt

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

Start Hunting!

Translated by