我正在尝试从扫描的技术图纸中提取文本。出于保密原因,我不能发布实际的图纸,但它看起来与this相似,但形状中有更多的文本。由于字母相互接触以及周围的边框/符号的问题,这个问题非常复杂。
我发现了一篇有趣的论文,它正是这样做的,叫做“从数字工程图纸中检测文本区域”。这篇论文在付费墙后面,所以你可能无法访问它,但本质上它试图通过两个步骤从图像中删除所有非文本的内容:
1)擦除线性组件,包括长和短的孤立线
2)根据笔划的连接组件分析擦除非文本笔划
什么样的OpenCV函数可以帮助执行这些操作?我宁愿不从头开始写一些东西来做这些,但我怀疑我可能不得不这样做。
我尝试过使用基于模板的方法来隔离文本,但由于文本位置在图形之间没有完全标准化(即使在同一个项目中),因此它无法检测到第一个扫描图形之后的文本。
3条答案
按热度按时间hof1towb1#
我正在解决一个类似的问题。技术图纸是一个问题,因为OCR软件大多试图找到文本基线和图纸工件在你指定的图中,没有太多的字符相互接触,所以我建议把图像分成连续的(黑色)像素,然后分别扫描这些像素。相邻区域的高度也应该给予一个指示,如果相邻区域是文本,或绘图的一部分。要将图像分割为相邻像素,请使用泛色填充算法,宇宙魔方的扫描效果很好
fivyi3re2#
显然我从来没有尝试过这个特定的任务,但是如果图像真的看起来像你给我看的那样,我会从删除所有垂直和水平的线条开始。这可以很容易地完成,只需设置一个宽度阈值和强度大于某个N值的所有像素,然后查看垂直于假设线条方向的像素的阈值数量。如果它看起来像一条线,就删除它。
更优雅,也许更好的方法是对直线和圆进行霍夫变换,并以这种方式删除这些元素。
你也可以尝试一些基于FFT的滤波,但我不太确定。
我从来没有使用过OpenCV,但我猜它可以做我提到的事情。
7lrncoxx3#
我正在解决一个类似的问题,只是我的图纸没有那么复杂。