在matlab中使用insertshape函数插入行后添加图例

时间:2016-08-05 11:18:04

标签: matlab legend imshow

我的代码如下所示:

p = imread('C.png');
p1 = im2double(p);
RG = insertShape(p1, 'Filledcircle', pos1, 'LineWidth', 10,'Color','blue','Opacity',1);
RG = insertShape(RG, 'Line', {line1,line2},'Color',{0 1 0;0 1 1});
hc = imshow(RG);
legend(hc,'line1','line2');
legend('show');

我正在使用图像查看器应用程序从我插入的圆圈中获取x和y坐标,这不是让坐标将它们连接在一起的正确方法。

1 个答案:

答案 0 :(得分:0)

insertShape直接修改图像的RGB数据,不会为插入的形状生成图形对象。因此,legend无法显示图形句柄(另请参阅:the valid object types for legend

作为一种解决方法,您可以为每个形状生成虚拟线系列。由于MATLAB不会以可视方式呈现NaN值,因此它们可用于创建未在轴上显示的线对象。

例如:

% Read sample image
RGB = imread('peppers.png');
imshow(RGB);

% Add some annotations
dim1 = [0.3 0.7 0.2 0.2];
annotation('rectangle', dim1, 'Color', 'red')
dim2 = [0.6 0.5 0.1 0.1];
annotation('rectangle', dim2, 'Color', 'blue')
x1 = [0.5 0.6];
y1 = [0.7 0.5]; 
annotation('line', x1, y1, 'Color', 'green', 'LineWidth', 2)
x2 = [0.5 0.7];
y2 = [0.9 0.6];
annotation('line', x2, y2, 'Color', 'magenta', 'LineWidth', 2)

% ============== EVERYTHING ABOVE THIS LINE IS SPECIFIC TO MY EXAMPLE, IGNORE IT

% Plot dummy lineseries for legend
% Specify 'DisplayName' for legend, can also be done manually in legend call
hold on
tmp(1) = plot(NaN, 'Color', 'green', 'LineWidth', 2, 'DisplayName', 'Green Line');
tmp(2) = plot(NaN, 'Color', 'magenta', 'LineWidth', 2, 'DisplayName', 'Magenta Line');
hold off

% Display legend
legend(tmp)

产生以下内容:

yay