如果你问为什么我使用ginput
得到点击的位置答案是,我打算用这个脚本来编辑二进制图像!我删除了与二进制图像编辑部分对应的行,以避免混淆。
hFi= figure; imshow(e);
button=0;
while button~=2
% Get the mouse position on the axes (needed for binary image editing) and button number
[y,x,button]=ginput(1);
% Get the mouse position on the figure
position=get(hFi,'CurrentPoint')
% Set 'CurrentPoint' to the mouse position that was just captured
set(hFi,'CurrentPoint',position)
% Determine if it is a zoom-in or zoom-out
if button==1
zoom(2);
elseif button==3
zoom(0.5);
end
end
我认为命令set()
在这里没有做任何事情,但我看到有人在论坛中提出建议。对不起,如果看起来很蠢!
答案 0 :(得分:0)
我假设你有一个矩阵,因为你要求y和x值。 通过这种方式,一个简单的答案就是显示更小或更大范围的值。
让A成为你的矩阵。
A=rand(1000,1000);
figure,
h=imagesc(A)
axis off
axis image
colormap('gray')
A_range=size(A);
A_zoom=1;
while true
[y,x,button]=ginput(1)
A_center=[x,y];
if button==1
A_zoom=A_zoom/2;
elseif button==3
A_zoom=A_zoom*2;
end
axis([max(x-A_range(1)*A_zoom,1), min(x+A_range(1)*A_zoom,A_range(1)), ...
max(y-A_range(2)*A_zoom,1), min(y+A_range(2)*A_zoom,A_range(2))])
end
答案 1 :(得分:0)
好吧,在玩了imshow
并阅读互联网上的文档之后,我终于找到了我一直在寻找的东西。感谢所有提出一些想法的人,尤其是ASantosRibeiro,他给了我改变轴限制的想法。
基本上,我使用了zoom
和xlim
/ ylim
命令的组合。因此,最终代码如下:
hFi= figure; h=imshow(e);
button=0;
zlvl=1;
xl = get(gca,'xlim');
xlen = size(e,2);
yl = get(gca,'ylim');
ylen = size(e,1);
while button~=2
% Get the mouse position on the axes (needed for binary image editing) and button number
[y,x,button]=ginput(1);
% Determine if it is a zoom-in or zoom-out
if button==1
zlvl = zlvl*2;
zoom(2);
elseif button==3
zlvl = zlvl/2;
if zlvl<1, zlvl=1; end % No zoom level smaller than 1
zoom(0.5);
end
% Change the axis limits to where the mouse click has occurred
% and make sure that the display window is within the image dimensions
xlimit = [x-xlen/zlvl/2+0.5 x+xlen/zlvl/2+0.5];
if xlimit(1)<0.5, xlimit=[0.5 xlen/zlvl+0.5]; end
if xlimit(2)>0.5+xlen, xlimit=[xlen-xlen/zlvl+0.5 xlen+0.5]; end
xlim(xlimit);
ylimit = [y-ylen/zlvl/2+0.5 y+ylen/zlvl/2+0.5];
if ylimit(1)<=0.5, ylimit=[0.5 ylen/zlvl+0.5]; end
if ylimit(2)>=0.5+ylen, ylimit=[ylen-ylen/zlvl+0.5 ylen+0.5]; end
ylim(ylimit);
end
此代码可让您在使用ginput
时放大/缩小,并且需要使用imshow
来保持图像的宽高比固定。当您需要读取图像像素的坐标并放大/缩小时,这将变得非常有用。当用户左键单击时,它会放大,当用户左键单击时,它会缩小。如果单击中间按钮,则while循环结束。可以添加其他按钮以执行所需的操作。例如,我添加了几行代码来编辑二进制图像。
我想知道您的想法,以及是否有任何方法可以使此代码更有效。