基于Android和OpenCV的答题卡识别软件
1. 软件介绍
设计目标是可以添加不同的考试,在不同考试下可以设置模板,包括题目数量、答题卡样式、每题分值以及每题答案;扫描结果按列表显示,并讲识别出的图片展示处理,点击列表项也可以弹出识别结果。
扫描答题卡可以从相机或者相册中选择。
2.识别原理介绍
以下主要介绍两个核心部分:获取答题区域和识别用户填涂选项。
2.1获取答题区域及矫正
2.1.1总体流程介绍
获取答题区域,首先要对原始的彩色图像进行预处理操作,包括转灰度图像、高斯模糊、边缘检测等,然后从得到的图像寻找轮廓,并对轮廓进行一定的筛选,接着求出答题卡矩形顶点的坐标,利用坐标进行透视变换从而得到答题区域。总体流程图如图所示。
2.1.2 图像预处理
在获取答题区域之前,需要对图片进行预处理。首先将用户输入的原始图像转化为灰度图像,以减少后续对图像处理的运算复杂度。然后使用高斯滤波(3*3)对图像去噪,再利用Sobel算子分别求出图像在X和Y方向上的梯度,将他们进行叠加以获取边缘。
在进行叠加时,对两个图像的叠加权重适当加大,否则可能导致边缘不够清晰使甚至断开寻找轮廓失败。权重设置为1,可以理解为X、Y方向的图像进行叠加,可以看到矩形的右边缘不太清晰,在图片质量差的情况下可能会发生断裂不完整,使后续查找矩形轮廓时失败。 权重设置为5,可以理解为将X、Y方向的图像进行5次叠加,原本不太清晰的边缘经过多次叠加后变得清晰。
权重设置为1
权重设置为5
在完成边缘检测后,可以看到图像还是存在很多细小的噪点,为了