【发布时间】:2020-11-03 19:10:19
【问题描述】:
我遇到过几个问题,但对此我的回答并不令人满意。 Pillow 可以使用 ttf 字体,但 draw.textsize(text,font) 和 font.getsize(text) 返回相同的错误尺寸。
opencv.getTextSize 是正确的,但只提供了几种字体。
我通过在尺寸大于所需近似尺寸的图像上绘制带有枕头的文本,在步骤 2 中将该图像转换为 opencv 像素数组并在步骤 3 中对其进行精确裁剪,从而获得了精确的结果。
这有两个问题:
- 太慢了。那么有没有一种快速的方法来提取数组的中心部分,以切断所有白色像素或低于阈值的所有内容的边界?
- 即使知道确切的尺寸,在原点绘制文本,在一个较大的框中使用确切的文本大小计算,即在一个正方形中居中一个数字,它仍然没有居中绘制。我假设枕头将用于字距调整或此类字体相关尺寸的空像素计数到区域 textsize 或 getsize 返回。所以最终这也可能与特定的坏字体有关,但我对 Arial、Arialbd、Times New Roman 或 Cambria 得到了同样的错误结果,仅举几例。
有没有机会得到这个精确的?最后,我想制作一个非常窄的内部数字边界框(用于与数学相关的学习/演示视频)。这不仅是迂腐,而且摆弄手动更正会使生成此类视频成为一场噩梦,我现在构建的基础工具应该尽可能精确。
编辑:在我的例子中,文本是数字,它们既没有上升也没有下降。我也观察到水平居中工作正常,只是垂直位置太低。考虑到偏移量,我会看看我得到了什么。
【问题讨论】:
-
这可能与offset values for the font有关吗?
-
顺便说一句我的规格:Win10 python 3.7.8,模块枕头(8.0.1)和opencv-contrib-python(4.4.0)
-
@MartijnPieters:可能相关。我必须稍后检查一下,然后再提供反馈。谢谢。
-
谢谢你,马丁,考虑到偏移量的例子对我有用。
-
您可以使用 python 子进程调用 Imagmagick 来使用 -debug annotate 来获取字体指标。见imagemagick.org/Usage/text/#font_info
标签: python opencv fonts python-imaging-library text-size