[OCRing技术图纸时,大多数(全部?)ocr引擎的周围几何体都有问题,有时会错误地将线条解释为字母。
为了提高OCR的质量,我首先要从图形中删除图像中的某些元素,主要是圆形和矩形。
这些图都是黑白的,看起来与下面的示例非常相似。
实现此目标的最佳方法是什么?我玩过image magick和opencv效果不佳...
这里是部分解决方案。这个问题可以分为两个步骤:
1)通过去除水平和垂直线来去除矩形
我们创建垂直和水平内核,然后执行变体变形以检测线条。在这里,我们使用按位运算来删除行。
垂直线(左)和水平线(右)
已删除的行
import cv2
image = cv2.imread('1.jpg')
vertical_kernel = cv2.getStructuringElement(cv2.MORPH_RECT, (1,15))
remove_vertical = 255 - cv2.morphologyEx(image, cv2.MORPH_CLOSE, vertical_kernel)
horizontal_kernel = cv2.getStructuringElement(cv2.MORPH_RECT, (15,1))
remove_horizontal = 255 - cv2.morphologyEx(image, cv2.MORPH_CLOSE, horizontal_kernel)
result = cv2.add(cv2.add(remove_vertical, remove_horizontal), image)
cv2.imshow('result', result)
cv2.waitKey()
2)检测/删除圈子
有几种消除圆圈的方法
cv2.HoughCircles()
。这是cv2.HoughCircles()
cv2.MORPH_ELLIPSE
内核,然后执行cv2.getStructuringElement()
以分离圆轮廓cv2.getStructuringElement()
和morphological operations进行轮廓逼近。使用此方法的一个折衷方案是,它仅适用于“完美”形状。看看cv2.arcLength()
和cv2.approxPolyDP()