我是靠谱客的博主 刻苦寒风,这篇文章主要介绍在 Matlab figure 控件中创建随鼠标运动的图形,现在分享给大家,希望可以做个参考。

    如果需要对载入图像的感兴趣区域(ROI)进行处理,而这些区域的尺寸大小(单位:pixel)是类似的,为了简便起见,希望通过设置以鼠标当前位置为中心并能随着鼠标移动的矩形框来框选ROI区域。这里介绍一种在载入图像后的figure中实现绘制随鼠标运动的图形的方法。

    为了实现这种交互需求,需要通过鼠标事件触发响应函数。较常见的几种鼠标响应事件如 WindowButtonDownFcn,WindowButtonMotionFcn 等。这里考虑使用ButtonMotionFcn,而WindowButtonDownFcn 用于在框选ROI后触发后续处理函数的行为。

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
himg = figure; %存储图形句柄 imshow(imread('pictureName')); set(himg,'WindowButtonMotionFcn',{@get_roi_scope,Range_r}); % Range_r代表矩形每条边到鼠标当前位置的距离,unit:像素 function get_roi_scope(src,event,Range_r) global h_rectangle %全局变量,用于保存绘制图形句柄 pt = get(gca,'CurrentPoint'); %获取鼠标当前位置 pix_x = pt(1,1); %水平方向 pix_y = pt(1,2); %垂直方向 xlimits = get(gca,'XLim'); %获取当前坐标轴中x,y方向的最大值最小值 ylimits = get(gca,'YLim'); if pix_x>(xlimits(1)+Range_r) && pix_x<(xlimits(2)-Range_r)&&... pix_y>(ylimits(1)+Range_r) && pix_y<(ylimits(2)-Range_r) %如果在图像边缘时不绘制 if ~isempty(h_rectangle) %判断是否已经绘制了图形 delete(h_rectangle); %已经绘制了就删除该图形句柄 end scope_x = [pix_x-Range_r,pix_x+Range_r,pix_x+Range_r,pix_x-Range_r,pix_x-Range_r]; scope_y = [pix_y-Range_r,pix_y-Range_r,pix_y+Range_r,pix_y+Range_r,pix_y-Range_r]; hold on; h_rectangle = plot(scope_x,scope_y,'w'); %在新的位置绘制图形 hold off; end end

    当鼠标在选定的坐标对象中移动时,触发绘图函数,此函数判断在移动前是否已绘制了图形,若图形句柄存在,需要将前一次的绘制结果删除,并在新的位置进行图形绘制工作。这里如果将矩形框替换成其他任意曲线,也可以实现任意曲线的鼠标跟随操作。

最后

以上就是刻苦寒风最近收集整理的关于在 Matlab figure 控件中创建随鼠标运动的图形的全部内容,更多相关内容请搜索靠谱客的其他文章。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(66)

评论列表共有 0 条评论

立即
投稿
返回
顶部