cv2轮廓无法检测到某些形状

时间:2018-10-08 08:47:28

标签: python opencv image-processing

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

这是我用来获取以上代码的代码

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实现的内部工作原理,但是找不到任何资源(如果我能找到它,我至少可以调试并了解为什么会发生这种情况)。任何指针将不胜感激。

1 个答案:

答案 0 :(得分:2)

接触网格的字符无法隔离,因为它们属于较大的斑点。

由于网格似乎对齐良好,因此您可以在执行OCR之前尝试找到网格线并擦除它们。

enter image description here