答题卡阅卷 OMR
Optical Mark Recognition (OMR)
📌 项目介绍
拍摄纸质答题卡,自动识别考生填涂的选项并统计得分:检测答题卡区域 → 透视矫正 → 定位选项格子 → 依据涂黑程度判定答案。
这是教育场景的经典应用,整个流程依赖 OpenCV 的图像处理基础功(阈值分割、轮廓查找、透视变换、像素统计),综合性强、非常值得动手。
🧰 环境与物料
- 电脑 + 摄像头(或手机拍摄答题卡)
- Python 3.7+ 环境
- pip 安装:opencv-python、numpy
- 打印好的答题卡(标准答案另存一份用于判分)
🔧 步骤拆解
1
定位答题卡
用边缘检测 + 轮廓查找找到答题卡四边形
透视变换把答题卡拉正成标准视图
2
灰度与阈值
灰度化后二值化,涂黑区域与空白区域分离
阈值建议用自适应方法抗光照不均
3
定位选项格子
利用行列投影找到每道题的选项区域
或按答题卡固定布局计算格子位置
4
判定涂黑
统计每个格子内的黑色像素占比
占比高于阈值的格子记为「已涂」
5
生成答案与判分
把已涂选项拼接成学生答案
与标准答案比对计算得分
6
输出结果
在答题卡上标注每题对错,显示总分
批量处理多张答题卡并导出 CSV
💡 要点提示
- 答题卡设计时加定位标记(四角黑块),识别鲁棒性大幅提升
- 涂黑阈值根据「空格子 vs 满涂格子」像素占比取中间值
- 拍摄角度过大时透视矫正容易失真,尽量正对拍摄