OCR:指数检测,超级/下标(C ++)

时间:2016-07-28 09:41:16

标签: c++ opencv ocr

我能够识别字符,例如123,...,n

我一直在想办法检测某个数字是另一个数字的指数。

例如,在运行我的程序后this picture应该返回(5/6)^2,但我无法想出一个方法或想法来说明这个数字是一个指数。

有什么建议吗?我在c ++中使用openCV。

1 个答案:

答案 0 :(得分:0)

检测到字符时,您将拥有各自的边界框。有一些假设要做,比如知道字符的大致比例,我们称之为S - 你可以从所有检测到的边界框的大小推断出这一点。

基于此,您可以尝试以下方法:

  1. 对于每个检测到的边界框(D_bbox),定义从边界框中心到±2 * S的搜索范围
  2. 在此搜索区域中,从其他检测到的字符中查找其他边界框中心(O_bbox)
    1. 对于在搜索区域中找到的每个中心,计算D_bbox和O_bbox之间的比率。指数字符大小应小于数字=> D_bbox / O_bbox> 1.
  3. 我会说它应该在1.5左右,但这取决于字体等。玩这些值并看看你得到了什么。

    其他一些可能有帮助的启发式方法:

    • D_bbox_centre_x< O_bbox_centre_x
    • D_bbox_centre_y< O_bbox_centre_y

    数字总是在指数的左边,它的中心总是低于指数的中心。

    我不会尝试检测括号,因为可能存在不使用它们来编写指数的实例。