检测表单图像中的选中复选框

时间:2017-07-21 22:12:24

标签: python opencv

在巴西,有一种名为DNV的形式(葡萄牙语为" Born Alive Declaration")。我在一家巴西政府机构工作,该机构每年从全州各家医院接收超过50万件这样的机构。

我试图检测复选框字段上的标记。我开始使用" Sex"包含M(男性),F(女性)或I(忽略)复选框的字段。

我已经能够使用OpenCV充满信心地找到该字段和复选框:

enter image description here

我认为带有更多暗像素的复选框区域是标记的,并且即使图像质量非常低,它也能在99%的时间内工作。

if sum(checkbox1) < sum(checkbox2):
    return "M"
else:
    return "F"

有时这会失败:人类会告诉女性&#34;复选框已标记,但由于sum(checkbox1)为577,065且sum(checkbox1)为605,880,因此计算机显示它是男孩。

enter image description here

我尝试使用几种方法和值结合形态变换进行阈值处理操作(在几种组合中进行侵蚀和扩张,并使用许多内核形状和大小)并得到了这个:

sex_field = cv2.fastNlMeansDenoising(cv2.blur(sex_field, (3, 3)), 30, 30, 15, 50)
_, sex_field = cv2.threshold(~sex_field, 127, 255, 0)
sex_field = ~cv2.morphologyEx(sex_field, cv2.MORPH_CLOSE, 
                              np.ones((3, 3), np.uint8), iterations=3)

enter image description here

问题是cv2.fastNlMeansDenoising很贵。是否有一个较轻的算法对此用例有用?

0 个答案:

没有答案