【问题标题】:cv2 contours unable to detect some shapescv2 轮廓无法检测到某些形状
【发布时间】:2018-10-08 20:09:00
【问题描述】:

我正在尝试从 OCR 表单中提取字符,并且在尝试了连接组件、MSER 和轮廓之后,发现轮廓是最可靠的。但问题是,有时它无法检测到与其已经检测到的形状非常相似的形状。例如,在所附图像中,第 1 行第 4 列中的“A”未被检测到,而仅在 2 列之外,它是!第 3 行中的“A”也是如此(第 3 列与第 7 列)。

这是我用来获取上述内容的代码

im = cv2.imread('IMAGES/ACH0.png')
imgray = cv2.cvtColor(im,cv2.COLOR_BGR2GRAY)
imgray = cv2.GaussianBlur(imgray, (5, 5), 0)
(ret, thresh) = cv2.threshold(imgray, 127, 255, cv2.THRESH_BINARY_INV +cv2.THRESH_OTSU
im2, contours, hierarchy = cv2.findContours(thresh,cv2.RETR_LIST ,cv2.CHAIN_APPROX_SIMPLE)
areas = [cv2.contourArea(c) for c in contours]
for ctr in range(len(areas)):
  if areas[ctr] > 10000: continue
  cnt=contours[ ctr ]

  x,y,w,h = cv2.boundingRect(cnt)
  cv2.rectangle(im,(x,y),(x+w,y+h),(0,255,0),1)

我尝试阅读 findContours 的 cv2 实现的内部工作原理,但找不到任何资源(如果我能找到它,我至少可以调试并理解为什么会发生这种情况)。任何指点将不胜感激。

【问题讨论】:

  • findContours 不会“检测形状”,它会找到所有轮廓。有问题的A 触及网格,因此它不会是一个单独的轮廓——相反,它将与所有其他接触它的字母(或其部分)一起成为网格计数的一部分。
  • 有道理..让我在下面采纳 Yves 的建议,然后再试一次

标签: python opencv image-processing


【解决方案1】:

接触网格的字符不能被隔离,因为它们属于更大的 blob。

由于网格似乎对齐良好,您可以尝试定位网格线并在执行 OCR 之前将其擦除。

【讨论】:

  • 谢谢 .. 你说的很有道理 .. 让我试试并更新这个话题。
猜你喜欢
  • 2017-11-19
  • 1970-01-01
  • 1970-01-01
  • 2019-05-29
  • 2023-03-13
  • 2011-09-13
  • 1970-01-01
  • 1970-01-01
  • 2021-10-29
相关资源
最近更新 更多