OpenCV文本块检测

时间:2014-02-04 17:06:39

标签: objective-c opencv text

我需要使用OpenCV来检测图像中的所有文本块,以准备将它们发送到OCR。 从我对OpenCV的有限知识来看,这是我可能的解决方案之一,但我不确定如何将其转化为真正的解决方案。

  1. 使用findContours检测字符轮廓
  2. 使用层次结构过滤字符
  3. 在过滤区域放置边界矩形
  4. 组边界rects包含文本块
  5. 这会有用吗?如果是这样,我如何“执行”这个?扫描可能有多个文本块,我在iOS上这样做。

    这适用于名片等内容吗?每个角落可能都有文本块?我只需要扫描文本并一起扫描组/块。

1 个答案:

答案 0 :(得分:4)

我最近使用以下方法来提取文本blob:

  1. 使用MSER算法检测关键点。我发现找到信件很好。
  2. 可选择过滤掉“小”和“非常大”的(大小属性)。
  3. 将关键点分组为相邻字母组 - 由启发式定义的邻接关系,两个关键点必须具有相似的大小并且相互靠近(相对于其大小的距离)。
  4. 取每组的边界框,这是一个候选词或字符blob。
  5. 将其发送至OCR(我在Tesseract OCR库中取得了良好的效果)。
  6. 以上对于干净背景的文本效果相当不错,但是如果有很多非文本艺术作品,它确实检测到非文本blob,因为唯一的OCR前过滤是“类似大小和附近”度量标准。

    如果您正在扫描名片,它可能已经足够好了。

    您需要为您的域校准“附近”和类似大小的启发式方法。

    对于“相似大小”,我使用3/5和5/3之间关键点大小的比率,并且“附近”定义为关键点之间的距离小于两者中最小关键点大小的7/4倍。

    在自然图像中,您需要更强大的方法。为此,我可以推荐以下论文:

    Robust Text Detection in Natural Images with MSER