从技术图纸图像中删除圆圈

在对技术图纸进行OCR处理时,大多数(全部?)ocr引擎都存在周围几何图形的问题,有时会错误地将直线解释为字母。

为了提高OCR的质量,我首先要从图像中删除某些元素,主要是圆形和矩形。

所有图纸都是黑白的,看起来与下面的示例非常相似。

实现此目标的最佳方法是什么?我玩过image magick和opencv效果不佳...

从技术图纸图像中删除圆圈

okam6hz 回答:从技术图纸图像中删除圆圈

这是部分解决方案。这个问题可以分为两个步骤:

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,horizontal_kernel)

result = cv2.add(cv2.add(remove_vertical,remove_horizontal),image)

cv2.imshow('result',result)
cv2.waitKey()

2)检测/删除圈子

有几种方法可以删除圆圈

  1. 使用cv2.HoughCircles()。这是detect circles in images using Hough Circles
  2. 的不错的教程
  3. 使用cv2.getStructuringElement()来构建cv2.MORPH_ELLIPSE内核,然后执行morphological operations来分离圆轮廓
  4. 使用具有轮廓近似和轮廓过滤的简单形状检测来检测圆。此方法使用cv2.arcLength()cv2.approxPolyDP()进行轮廓逼近。使用此方法的一个折衷方案是,它仅适用于“完美”形状。看看detect simple geometric shapesopencv shape detection
本文链接:https://www.f2er.com/3158907.html

大家都在问