我有一个小项目,我想用它来玩计算机视觉。我扫描了一份文档,其中有一些单词被圈出,或者更具体地说,被 2 条平行水平线包围,每一端由曲线连接。类似于小学生使用的单词搜索工作表,但线条更简洁且只有水平。
目标是提取带圆圈的位,然后仅将这些部分传递给 OCR 过程以获取带圆圈的文本。
我之前使用一些打包的 haar 级联来使用 opencv 进行面部识别。类似的方法是否适用于简单的形状,或者 OpenCV 中是否有较低级别的方法可以很好地工作?
我有一个小项目,我想用它来玩计算机视觉。我扫描了一份文档,其中有一些单词被圈出,或者更具体地说,被 2 条平行水平线包围,每一端由曲线连接。类似于小学生使用的单词搜索工作表,但线条更简洁且只有水平。
目标是提取带圆圈的位,然后仅将这些部分传递给 OCR 过程以获取带圆圈的文本。
我之前使用一些打包的 haar 级联来使用 opencv 进行面部识别。类似的方法是否适用于简单的形状,或者 OpenCV 中是否有较低级别的方法可以很好地工作?
如果线条始终采用相同(或相似)颜色,您可以使用inRange函数仅获取线条。然后使用findContours函数找到所有圆圈区域的轮廓,然后用白色像素填充它们,然后对该图像和原始图像进行按位和运算。结果,您将只获得带圆圈的区域(包括线条 - 如果您想避免这种情况,请尝试使用用户侵蚀和扩张功能)。
我之前使用一些打包的 haar 级联来使用 opencv 进行面部识别。类似的方法是否适用于简单的形状,或者 OpenCV 中是否有较低级别的方法可以很好地工作?
我认为可以创建 Haar cascade 来找到圆圈区域,但是:
用于检测图像中线条的一种很好、简单的方法是霍夫变换。它基本上充当线路参数的累积缓冲区。这应该能够相当容易地检测到您的长平行线,并通过阈值区分它们和字母。然后您可以遍历这些线条并从平行对中提取一个区域来分割字母。