0

我有一个小项目,我想用它来玩计算机视觉。我扫描了一份文档,其中有一些单词被圈出,或者更具体地说,被 2 条平行水平线包围,每一端由曲线连接。类似于小学生使用的单词搜索工作表,但线条更简洁且只有水平。

单词搜索工作表

目标是提取带圆圈的位,然后仅将这些部分传递给 OCR 过程以获取带圆圈的文本。

我之前使用一些打包的 haar 级联来使用 opencv 进行面部识别。类似的方法是否适用于简单的形状,或者 OpenCV 中是否有较低级别的方法可以很好地工作?

4

2 回答 2

2

如果线条始终采用相同(或相似)颜色,您可以使用inRange函数仅获取线条。然后使用findContours函数找到所有圆圈区域的轮廓,然后用白色像素填充它们,然后对该图像和原始图像进行按位和运算。结果,您将只获得带圆圈的区域(包括线条 - 如果您想避免这种情况,请尝试使用用户侵蚀和扩张功能)。

我之前使用一些打包的 haar 级联来使用 opencv 进行面部识别。类似的方法是否适用于简单的形状,或者 OpenCV 中是否有较低级别的方法可以很好地工作?

我认为可以创建 Haar cascade 来找到圆圈区域,但是:

  • 你会得到矩形,所以如果文本不是完全水平或完全垂直,你会得到很多额外的(和无用的)像素/字母
  • 我的和 Gavinb 的解决方案都可能更快、更简单、更精确
于 2013-03-29T02:29:35.210 回答
1

用于检测图像中线条的一种很好、简单的方法是霍夫变换。它基本上充当线路参数的累积缓冲区。这应该能够相当容易地检测到您的长平行线,并通过阈值区分它们和字母。然后您可以遍历这些线条并从平行对中提取一个区域来分割字母。

于 2013-03-29T01:43:10.573 回答