如何使用 OpenCV 检测与文档中的一行相交的复选框

How to use OpenCV to detect a checkbox that intersects a line in a document

我已成功使用代码检测文档中的复选框,基本情况类似于:

它运行良好,但是每当一个盒子在其一侧接触到一条线时它就会失败,这在我的用例中经常发生。我附上了两个例子,一个是原图,一个是用canny处理后的图。

Checkbox intersecting line Checkbox after canny

是否有一种通用的方法来分离两个重叠的轮廓,或者我可以使用其他一些方法来检测具有这种重叠的框?

您可以使用形态学来删除大部分使用 Python/OpenCV 的长线,如下所示。使用形态接近检测线。然后反转线条并将其添加回输入图像以用白色覆盖线条。

输入:

import cv2
import numpy as np

img = cv2.imread('box_line.png')

# do morphology to find long horizontal lines using a horizontal kernel longer than the width of the box
kernel = cv2.getStructuringElement(cv2.MORPH_RECT, (80,1))
line = cv2.morphologyEx(img, cv2.MORPH_CLOSE, kernel, iterations = 1)

# invert line
line = (255-line)

# add inverted line to image
result = cv2.add(img, line)

# write result to disk
cv2.imwrite("line_removed.png", result)

# display it
cv2.imshow("image", img)
cv2.imshow("line", line)
cv2.imshow("result", result)
cv2.waitKey(0)


使用上面的代码预处理你的图像,然后使用你的其他代码通过轮廓提取框。