使图像中的注释框背景半透明

时间:2012-11-05 12:40:36

标签: matlab

我目前正致力于在MATLAB中为卫星图像添加注释。由于每个文本字段下方的颜色可能会有很大变化,因此我想在文本下使用背景颜色,以便于查看和阅读。

但是,当我这样做时,很多地形都会变得模糊不清。我试图让每个文本框的背景颜色都是半透明的,但试图找到一个解决方案。但

有什么想法吗?我希望有一些UI元素,我可以将'facealpha'设置为0.5。我还需要支持轮换的文本(如下例所示)。

下面是一些示例代码和生成的图像。带有卫星数据的工作区也可以在链接中找到: Example workspace

figure(1);clf
imagesc(xx,yy,Map);

hold on
plot(xInspection,yInspection,'g.-')

% # Two ways of making a rotated text annotation. 
% # Cant make background semi-transparent
testAnno= annotation('textarrow',[0.5 0.5],[0.5 0.5], ...
                'string','textarrow annotation', ...
                'HeadStyle','none','LineStyle', 'none',...
                'TextRotation',asin(directionVec(1))*180/pi,...
                'TextBackgroundColor',[0.7 0.7 0.7]);

testText = text(mean(xInspection),mean(yInspection),'text annotation', ...
        'rotation',asin(directionVec(1))*180/pi, ...
        'HorizontalAlignment','right', ...
        'color',[0 0 0], ...
        'backgroundcolor',[0.7 0.7 0.7], ...
        'fontsize',8);

enter image description here

2 个答案:

答案 0 :(得分:4)

它看起来不像annotationtext返回具有BackgroundAlpha属性的HgObjects(它们可能存在,但我无法使用getundoc找到它们或尝试各种不同的黑客攻击。)

我能够通过自己绘制背景来获得一些工作。这是一个简单的概念证明:

f = figure;
tObj = text(.5, .5, 'text object', 'FontSize', 20);
set(gca,'XLimMode', 'manual', 'YLimMode', 'manual'); % prevent the axes from resizing automatically
p = get(tObj, 'Extent'); %Get the outer position of the text

% now create a  patch around the text object
pObj = patch([p(1) p(1) p(1)+p(3) p(1)+p(3)], [p(2) p(2)+p(4) p(2)+p(4) p(2)], 'r');
uistack(tObj, 'top'); % put the text object on top of the patch object

set(pObj , 'FaceAlpha', .2); % set the alpha of the patch face to .2

%Rotate the objects
set(tObj, 'Rotation', 20);
rotate(pObj, [0 0 1], 20);

答案 1 :(得分:2)

我担心唯一可以做到这一点的方法是不在注释中设置任何颜色,然后在每个注释的背景中放置patch。所以像这样:

% Use completely transparent annotations
hA = annotation('textarrow', ..., 'TextBackgroundColor', 'none')

% Place a transparent patch exactly in the background of your annotation
hP = patch(X, Y, 'white', 'EdgeColor', 'none', 'FaceColor', 'white', ...
    'alpha', 0.3)

% Ensure that your annotation is on top
uistack(hA, 'top')

但当然最大的问题是确定补丁的正确坐标(XY)。只需将坐标乘以rotation matrix即可轻松旋转。然而,找到贴片的长度和高度及其中心位置并不容易。您可以在Matlab中心找到一些有用的功能......