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

概述

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

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

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 控件中创建随鼠标运动的图形的全部内容,希望文章能够帮你解决在 Matlab figure 控件中创建随鼠标运动的图形所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

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

评论列表共有 0 条评论

立即
投稿
返回
顶部