我正在运行Matlab R2014b,并在给定特定坐标的图像上绘制一个矩形。
要清楚,比如画一个矩形[100,100,200,50]正在绘制一个矩形,其左角在水平和垂直方向上偏离图像左上角100个像素,宽度为200,身高是50。 以下代码有效:
figure;
imshow(im);
rectangle('Position',[100, 100, 200, 50],'edgeColor','r');
但在我获得上述正确的方法之前,我运行doc rectangle
并且该命令使用rectangle('Position',[x,y,w,h])
之类的用法,然后我检查了Rectangle Properties
页面,它说
x和y元素定义矩形左下角的坐标。 width和height元素定义矩形的尺寸。
然而,上述描述与y方向上的上述正确代码不匹配,即左下角或左上角是否为(0,0)点。我猜它们适用于不同的场景。需要说明。
- **编辑:为遇到此上翻问题的任何人添加一段代码来测试** -
im = imread('e:/_Photos/2.jpg'); %load your local image file
%Original version, correct to draw rectangles
figure;
subplot(1,3,1);
imshow(im);
rectangle('Position',[100, 100, 200, 50],'edgeColor','g');
%flip once using `axis xy`, need to set y_new = height-y
subplot(1,3,2);
imshow(im);
axis xy;
rectangle('Position',[100, size(im,1)-100, 200, 50],'edgeColor','r');
rectangle('Position',[100, 100, 200, 50],'edgeColor','g');
%flip twice using `flipud` and `axis xy`,
%note we still need to recalculate the new y
subplot(1,3,3);
im = flipud(im);
imshow(im);
axis xy;
rectangle('Position',[100, size(im,1)-100, 200, 50],'edgeColor','g');
rectangle('Position',[100, 100, 200, 50],'edgeColor','r');
答案 0 :(得分:1)
矩形属性的完整说明是:
矩形的大小和位置,指定为[x y width height]形式的四元素向量。 以数据单位指定值。 x和y元素定义矩形左下角的坐标。 width和height元素定义矩形的尺寸。
粗体句意味着你应该注意轴的方向。首先使用imshow
从顶部到底部翻转轴的y轴方向。
要查看与预期相同的行为,您可以在调用axis xy
后键入imshow
以将轴翻转回来(因此(0,0)点将位于左下角)。但是,这也会翻转图像,因此您可能只需要从顶部计算位置:
rectangle('Position',[100 size(im,1)-100 200 50]);