如何在Matlab中测量渲染文本?

时间:2013-07-08 10:25:59

标签: java matlab text fonts

是否可以在Matlab中了解文本维度?

例如,是否可以了解以下措施

enter image description here

更新

我不需要图像处理。我知道我可以用简单的常用人工智能推断出“g”字母基线的位置:)这不是我想要的。我希望Matlab给我它的内容,即字体指标。如果不能,则答案是“Matlab不能”。

更新2

目前我正在尝试通过这样的Java接口

figure_h=figure;
axes_h = axes('Position', [0, 0, 1, 1], 'Units', 'pixels');

s='g';
x=200;
y=200;

fontName = 'Times New Roman';
fontSize = 48; % will be in points

text('String', s, 'Units', 'pixels', 'Position', [x y], 'FontName', fontName, 'FontUnits', 'points', 'FontSize', fontSize);

% make equivalent Java font
jFont=java.awt.Font(fontName,java.awt.Font.PLAIN,fontSize);

% accessing metrics object
jFrame = get(figure_h,'JavaFrame');
jCanvas = jFrame.getAxisComponent;
jGraphics=jCanvas.getGraphics;
jMetrics=jGraphics.getFontMetrics;

%rectangle('Position', [x, y, jMetrics.charWidth(s), jMetrics.getDescent]);

但在getFontMetrics获取空指针异常。

2 个答案:

答案 0 :(得分:0)

您可以使用

获取字体图像
fh = figure;
text( 0, 0, 'frog', 'FontName', 'tahoma', 'FontSize', 30 );
axis off;
f = getframe( fh );
bw = rgb2gray(f.cdata)==0;

现在您将bw作为字体的二进制图像(在此示例中为tahoma大小为30)。您可以继续使用regionprops(尤其是'BoundingBox'属性)来计算所需的度量值(以像素为单位)。

答案 1 :(得分:0)

如果要获取字体指标,则需要创建一个虚拟的图形对象,如TextField,类似这样

fontName = 'Times New Roman';
fontSize = 48; % will be in points

jText = java.awt.TextField('');
jFont = java.awt.Font(fontName, java.awt.Font.PLAIN, fontSize);
jMetrics = jText.getFontMetrics(jFont);