忽略OpenCV中概率霍夫线变换中图片上的文字

时间:2019-03-05 11:26:53

标签: python opencv image-processing hough-transform houghlines

我的任务是: 获取所有文本块的所有坐标

我正在构建可识别图片,照片,文档中表格的应用程序。 我正在使用概率霍夫变换来检测照片上的所有线条,并且我需要检测细线和长线。

但是,我有一个问题:HoughLinesP可以像检测线一样检测表格中的文本,我将附上图片进行描述。在某些图像上,这不是问题,但是在某些照片上,它检测到许多错误的行(错误肯定),实际上是文本,而不是行。

我要解决的决定:

  1. 检测所有,并将它们压入数组
  2. 检测每个文本块的所有坐标并将其推入数组(我将需要文本块才能稍后识别表中的文本)
  3. 遍历所有行,并遍历所有文本块。如果行在文本上就位,则将其从行数组中删除。因此,我将获得所有非文本行。我将消除误报公认的行

因此,我需要在图像上具有所有文本块的所有坐标。它应该是围绕文本块的矩形

正常情况:
来源:enter image description here
公认:enter image description here

这是错误的情况:
来源:enter image description here
公认:enter image description here

这是我的代码:

    gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
    _, thresh = cv2.threshold(gray, 127, 255, cv2.THRESH_BINARY_INV + cv2.THRESH_OTSU)

    # Use Canny edge detection and dilate the edges for better result.
    edges = cv2.Canny(gray, 50, 150, apertureSize=3)
    kernel = np.ones((4, 4), np.uint8)
    dilation = cv2.dilate(thresh, kernel, iterations=1)

    # Perform HoughLinesP tranform.
    lines = cv2.HoughLinesP(dilation, rho=1, theta=np.pi / 180, threshold=35, minLineLength=50, maxLineGap=3)
    for line in lines:
        for x1, y1, x2, y2 in line:
            cv2.line(img, (x1, y1), (x2, y2), (0, 255, 0), 5)

    self.group_lines(lines)

    self.draw_recognized_lines(lines, img)

这行是我自己的算法,用于将检测到的行合并为一行(HoughtLinesP将行检测为许多小行的集合):

    self.group_lines(lines)

P.S。我尝试使用 minLineLength maxLineGap 阈值,但是每个图像与上一个图像都不相同,每个表都不同,所以我不能使用该参数的一个值来描述所有图像。

也许您有解决该问题的决定?

谢谢您的帮助!

0 个答案:

没有答案