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

问题描述 投票:2回答:1

[OCRing技术图纸时,大多数(全部?)ocr引擎的周围几何体都有问题,有时会错误地将线条解释为字母。

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

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

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

tech drawing

opencv image-processing imagemagick ocr image-manipulation
1个回答
0
投票

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

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)检测/删除圈子

有几种消除圆圈的方法

  1. 使用cv2.HoughCircles()。这是cv2.HoughCircles()
  2. 的一个很好的教程
  3. 使用detect circles in images using Hough Circles构建cv2.MORPH_ELLIPSE内核,然后执行cv2.getStructuringElement()以分离圆轮廓
  4. 使用具有轮廓近似和轮廓过滤的简单形状检测来检测圆。该方法使用cv2.getStructuringElement()morphological operations进行轮廓逼近。使用此方法的一个折衷方案是,它仅适用于“完美”形状。看看cv2.arcLength()cv2.approxPolyDP()
© www.soinside.com 2019 - 2024. All rights reserved.