连接好几个

时间:2015-01-06 08:22:28

标签: matlab image-processing matlab-guide

我想在轴上使用几个交互式矩形(imrect)。其中一些矩形应该连接起来。那就是:

  • 如果用户更改了一个矩形的颜色,则所有连接的矩形应自动获得相同的颜色
  • 如果用户点击一个矩形,所有连接的矩形都应以某种方式突出显示(即,我想要视觉反馈选择了哪些矩形)。

但我不知道该怎么做。我无法找到一个矩形颜色改变后被激活的回调。我也不知道如何修改矩形的外观(除了颜色)以显示矩形已被选中。而且,遗憾的是,我不知道如何检测用户何时点击一下。

谢谢!

1 个答案:

答案 0 :(得分:2)

部分答案:
假设您有几组矩形,表示为单元格数组(每组的单元格元素) 每个组是ni - by-4数组,表示ni矩形。例如:

gRects = { [ 20 10 200 300; 40 60 200 100 ], ...
           [ 50 50 150 150 ], ...
           [ 150 200 30 50 ; 150 10 100 100 ; 200 30 40 100 ] };

也就是说,你有三组,第一组有2个矩形,第二组有一个,第三组有三个。

您现在可以绘制它们,并存储句柄以供将来修改

ng = numel( gRects ); %// how many groups
clrs = rand( ng,3 ); %// randomly select a color per group
img = imread('cameraman.tif'); %// a backgroud ?
figure;
imshow( img, 'border', 'tight' );hold on;
grH = cell( 1, ng );
for gi=1:ng
    ni = size( gRects{gi}, 1 ); %// num rects in current group
    grH{gi} = zeros( 1, ni );
    for ri = 1:ni
        grH{gi}(ri) = rectangle('Position',gRects{gi}(ri,:),...
            'EdgeColor', clrs(gi,:), 'LineWidth', 2, 'LineStyle', ':' );
    end
end

enter image description here
现在,如果你想“突出显示”其中一个组,例如第三个组:

gi = 3;
ni = size( gRects{gi}, 1 ); %// num rects in current group    
for ri = 1:ni
    set( grH{gi}(ri),...
        'LineWidth', 4, 'LineStyle', '-' );
end

enter image description here