cesium鼠标左键获取经纬度_如何在GUI上用鼠标获取图像坐标

一些涉及到数据处理的GUI界面,为了加强用户交互的功能,往往需要能够在图像上取点并对获取的坐标进行处理。今天做了个例子,简要介绍一下三种获取图像坐标的方法。 一、matlab工具栏中自带的数据游标功能。

b78ee015fe9249b30f37e7bf60a00505.gif

matlab工具栏中的数据游标功能可以读取数据图中的数据,并且在图中显示出横纵坐标。在OpeningFcn函数中加入一句set(hObject,'toolbar','figure');就可以打开图像界面的工具栏。 4079454ba94ecaba878fb18dc6b51821.png 或者在fig界面中双击背景,进入figure的属性编辑器,找到toolbar选项将其选择成‘figure’即可。

10539901fd670ef4d6691ddf1f43bc1a.png

利用工具栏中自带的数据游标功能很简单方便,但是有几个缺点:1、只有数据图才能用数据游标功能,如果是一张图片,数据游标功能就失效了。此外,只能 获取图上的数据点的坐标,非数据点的位置坐标是获取不到的。2、获取的坐标只能显示在图上,并不能得到它并进行处理,比如说你想将自己在图上先后选取的坐标点用折线图连起来,不好意思,办不到。 二、添加鼠标点击事件的监控函数,实时获取鼠标点击处的坐标值

4e7c20aa05154908a3c0bb1d54afbc07.gif

具体的程序如下截图所示。在画图的时候,记得把句柄赋值给一个变量。本例子中我将画出来的数据图的句柄赋给h,然后加入一句语句:set(h,'ButtonDownFcn',{@myim_ButttonDownFcn,handles});。 ButtonD ownFcn是监测到点击后执行的函数,所以这句程序的意思就是当监测到图像h上有点击事件时,就执行 myi m_ButttonDownFcn这个函数。然后自己编辑一个 myi m_ButttonDownFcn函数,获取当前坐标上鼠标的位置信息就行了。

45efe0f8dcba7cc65fdb1c16d2014040.png

这种方法的特点是:1、可获取数据图上的数据点的坐标,非数据点的位置坐标获取不到。如果是一张图片,则所有像素点的位置都可以获取的到。2、可以对获取的坐标值进行处理。

三、利用matlab自带的ginput函数

3c6a78a31b07b95da36d9b8c7e29169e.gif

ginput提供了一个十字光标使我们能更精确的选择我们所需要的位置,并返回坐标值。函数的三种调用形式为:

[x,y] = ginput(n)

[x,y] = ginput

[x,y,button] = ginput(...)

对于[x,y] = ginput(n),能使你从当前的坐标系中读取n个点,并返回这n个点的x,y坐标,均为n×1的向量。可以按回车提前结束读数。[x,y] = ginput 可以无限的读取坐标直到按下回车键。[x,y,button] = ginput(...) 返回x和y的坐标,以及button值(1=左键,2=中,3=右)。

本例中,我们添加了一个按钮,在按钮的回调函数中调用ginput来实现鼠标取值,程序如下截图所示:

5abf97fd87f317b4790bf89c31ea96ba.png

具体的程序注释都体现在截图中了。这种方法的特点是:

1、有一个十字光标实时跟踪鼠标,可以帮助更精确的取值;但是十字光标覆盖整个界面,简直不要太丑。

2、除了我们想要取值的图像区域,整个界面都可以点击并获取坐标值(非图像区域的坐标值是按照数据图的坐标轴扩展出来后给定的),不够严谨。这也是ginput函数被广泛诟病的地方。


其实,自己改动一下ginput函数,就可以将其十字光标限制到图像区域,此外,还可以修改十字光标的粗细、颜色等等。比如下面的动图所示:

69b79303da2c1459272590c324eb001f.gif

3901deedcf19a89ff764132ba9291739.gif

这个改动说来话长,下一篇具体介绍一下如何修改ginput函数。
  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值