You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Matlab App Designer中创建多个可自定义点ROI的代码优化方法

Matlab App Designer 多可拖拽点ROI优化实现方案

第一步:新增App公共存储属性

先在App Designer的属性编辑区添加公共属性,用来持久化存储ROI对象和对应坐标,避免回调函数运行完变量被释放:

properties (Access = public)
    roiArray % 存储所有点ROI对象的数组
    posArray % 存储所有点ROI对应坐标的数组
    roiCount = 3 % 需要生成的ROI数量,调整数量直接修改该值即可
end

第二步:重写StartButtonPushed回调代码

用循环替代重复的drawpoint声明,同时给每个ROI绑定位置更新事件,保证拖拽后坐标自动同步到存储数组中:

function StartButtonPushed(app, event)
    % 清空已有ROI避免重复添加
    if ~isempty(app.roiArray)
        delete(app.roiArray);
    end
    imshow('peppers.png','Parent',app.ImageAxes); 
    % 初始化存储数组
    app.roiArray = gobjects(app.roiCount,1);
    app.posArray = zeros(app.roiCount,2);
    % 循环生成ROI,无需重复编写drawpoint语句
    for i = 1:app.roiCount
        app.roiArray(i) = drawpoint(app.ImageAxes,'Label',"ROI_"+i);
        app.posArray(i,:) = round(app.roiArray(i).Position);
        % 绑定ROI移动事件,拖拽时自动更新坐标
        addlistener(app.roiArray(i),'ROIMoved',@(src,evt) updatePos(app,src));
    end
    drawnow; 
end

第三步:新增坐标同步辅助函数

在App的方法编辑区添加私有函数,用来在ROI被拖拽时自动更新存储的坐标值:

methods (Access = private)
    function updatePos(app,src)
        % 匹配被移动ROI的索引,更新对应坐标
        idx = find(app.roiArray == src);
        app.posArray(idx,:) = round(src.Position);
    end
end

功能说明

  • 调整ROI数量仅需修改属性roiCount的取值,无需修改循环逻辑
  • 所有ROI均支持自由拖拽,最新坐标会自动同步到app.posArray,可在App其他任意回调中直接读取该数组获取实时坐标
  • 不需要ROI序号标签的话,删除drawpoint语句里的'Label',"ROI_"+i参数即可

内容的提问来源于stack exchange,提问作者elyraz

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.29 10:24:05