基于OpenCV的答题卡自动识别与评分系统

引言

在教育考试场景中,手动批改答题卡效率低下且容易出错。本文将介绍如何使用Python和OpenCV实现一个答题卡自动识别与评分系统,通过计算机视觉技术完成答题卡的透视校正、选项识别和得分计算。该系统可广泛应用于学校考试、培训测评等场景,大幅提升批改效率。


环境准备

  • Python 3.7+
  • OpenCVpip install opencv-python
  • NumPypip install numpy

核心功能模块解析

整个系统分为以下核心步骤:
图像预处理 → 轮廓检测 → 透视变换 → 选项定位 → 答案匹配 → 结果输出

1. 导入依赖库

import numpy as np
import cv2
  • numpy:用于数值计算和数组操作。
  • cv2:OpenCV库,提供图像处理和计算机视觉算法。

2. 辅助函数定义

2.1 坐标点排序函数 order_points

答题卡的四个角点需要按左上→右上→右下→左下的顺序排列,否则透视变换会出错。
该函数通过计算坐标的和与差实现排序:

def order_points(pts):
    rect = np.zeros((4, 2), dtype="float32")
    s = pts.sum(axis=1)  # 计算(x+y),左上角点(x+y)最小,右下角点最大
    rect[0] = pts[np.argmin(s)]  # 左上
    rect[2] = pts[np.argmax(s)]  # 右下
    diff = np.diff(pts, axis=1)  # 计算(y-x),右上角点(y-x)最小(接近0),左下角点最大
    rect[1] = pts[np.argmin(diff)]  # 右上
    rect[3] = pts[np.argmax(diff)]  # 左下
    return rect
2.2 透视变换函数 four_point_transform

通过透视变换将倾斜的答题卡校正为正视图。
关键步骤:

  1. 计算变换前的四个角点(rect)。
  2. 确定变换后的目标尺寸(maxWidthmaxHeight)。
  3. 生成透视变换矩阵(M)并应用变换。
def four_point_transform(image, pts):
    rect = order_points(pts)
    (tl, tr, br, bl) = rect  # 解包四个角点
    # 计算变换后的宽度和高度(取两组对边的最大值)
    widthA = np.sqrt(((br[0]-bl[0])**2) + ((br[1]-bl[1])**2))
    widthB = np.sqrt(((tr[0]-tl[0])**2) + ((tr[1]-tl[1])**2))
    maxWidth = max(
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值