如何在Python/OpenCV中检测衬线和无衬线字体?

如何在Python/OpenCV中检测衬线和无衬线字体?,python,opencv,Python,Opencv,我想创建一个Python程序,它可以打印安装在我的计算机上的字体名称,还可以打印每个字体是衬线字体还是无衬线字体(我不想手动键入字体是否为衬线字体)。我已经让我的程序打印出安装在我电脑上的字体名称列表,但我不知道如何制作一个程序来检测字体是衬线字体还是无衬线字体 现在我正在考虑用给定字体的字母表创建图像,并将其与Times New Roman中的字母表进行比较(因为Times New Roman是一种相当标准的衬线字体),这就是我考虑使用OpenCV的原因。或者,我可以编写一个程序来查找每个字母

我想创建一个Python程序,它可以打印安装在我的计算机上的字体名称,还可以打印每个字体是衬线字体还是无衬线字体(我不想手动键入字体是否为衬线字体)。我已经让我的程序打印出安装在我电脑上的字体名称列表,但我不知道如何制作一个程序来检测字体是衬线字体还是无衬线字体

现在我正在考虑用给定字体的字母表创建图像,并将其与Times New Roman中的字母表进行比较(因为Times New Roman是一种相当标准的衬线字体),这就是我考虑使用OpenCV的原因。或者,我可以编写一个程序来查找每个字母中的角度/曲线,以确定衬线的位置,这可能会更好,但也可能需要为每个字母编写不同的程序

然而,这些只是想法,我不知道我如何才能真正开始实施。有人对我可以研究的软件包或模块有什么建议吗


为了清晰起见进行了编辑,希望这篇文章更容易理解

我们找到了如何制作一个相当可靠的版本

我选择了所有我想分析的衬线/无衬线字体,并将每个字体中的字母“N”打印到一个空白的png上。然后,我在图像上运行OpenCV函数来识别N的左侧,并在N的左侧顶部创建一行。如果这行的左侧有额外的位(衬线),那么我说该字体是衬线字体。否则,我说的字体是无衬线字体


有点粗糙,但出人意料的有效!它唯一遇到麻烦的字体是奇怪的翼状字体和非常程式化的字体。

你如何定义衬线字体和无衬线字体之间的区别?@Scott Hunter我会说,当角色末端有突起时。如果我的程序有任何不确定性,我可能会选择无衬线而不是衬线。在这种情况下,手写字体和草书字体最终也会进入无衬线字体库。我还考虑将每种字体与泰晤士报新罗马版进行比较,看看图像是否大致对齐,或者对字符的突出部分进行逐字分析(例如,对于角色A,在任意一条腿上查找衬线,然后对于角色B,在左上角和左下角查找衬线)。这让我很困惑,你是想检测图像中的字体还是网站中的字体?你已经定义了你想用python来检测字体,但不是从哪里获取数据…@Ruli不,我没有检测图像中的字体或网站中的字体。我只是想编写python代码,在你的计算机上获取字体,并告诉你字体是serif还是sans衬线。