我已经能够识别字符,如1
、2
、3
。。。,n
。
我一直在想一种方法来检测某个数字是另一个数字的指数。
例如,在运行我的程序后,这个图片应该返回(5/6)^2
,但我想不出用什么方法或想法来说这个数字是指数。
有什么建议吗?我在c++中使用openCV。
当检测到字符时,您将拥有它们各自的边界框。需要做出一些假设,比如知道字符的大致比例,我们称之为s——你可以从所有检测到的边界框的大小推断出这一点。
基于此,您可以尝试以下操作:
- 对于每个检测到的边界框(D_bbox),定义从边界框中心到±2*S的搜索范围
- 在该搜索区域中,从检测到的其他字符中查找其他边界框中心(O_bbox)
- 对于在搜索区域中找到的每个中心,计算D_bbox和O_bbox之间的比率。指数字符大小应小于数字=>D_bbox/O_bbox>1
我想它应该在1.5左右,但这取决于字体等。玩这些值,看看你得到了什么。
其他一些可能有帮助的启发式方法:
- D_bbox_centre_x<O_bbox_centre_x
- D_bbox_centre_y<O_bbox_centre_y
数字总是在指数的左边,它的中心在页面上总是低于指数的中心。
我不会尝试检测括号,因为在某些情况下,你可能不使用它们来写指数。