在巴西,有一种名为DNV的形式(葡萄牙语为" Born Alive Declaration")。我在一家巴西政府机构工作,该机构每年从全州各家医院接收超过50万件这样的机构。
我试图检测复选框字段上的标记。我开始使用" Sex"包含M(男性),F(女性)或I(忽略)复选框的字段。
我已经能够使用OpenCV充满信心地找到该字段和复选框:
我认为带有更多暗像素的复选框区域是标记的,并且即使图像质量非常低,它也能在99%的时间内工作。
if sum(checkbox1) < sum(checkbox2):
return "M"
else:
return "F"
有时这会失败:人类会告诉女性&#34;复选框已标记,但由于sum(checkbox1)
为577,065且sum(checkbox1)
为605,880,因此计算机显示它是男孩。
我尝试使用几种方法和值结合形态变换进行阈值处理操作(在几种组合中进行侵蚀和扩张,并使用许多内核形状和大小)并得到了这个:
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)
问题是cv2.fastNlMeansDenoising
很贵。是否有一个较轻的算法对此用例有用?