基于Python OpenCV实现的答题卡识别判卷源代码,自动识别答题卡并判卷给出最终分数
基于Python OpenCV实现的答题卡识别判卷源代码,自动识别答题卡并判卷给出最终分数。
·
基于Python OpenCV实现的答题卡识别判卷源代码,自动识别答题卡并判卷给出最终分数
完整代码下载地址:基于Python OpenCV实现的答题卡识别判卷源代码
原始答题卡
提取答题卡
转化灰度照片
边缘检测
识别结题判定
核心代码
# -*- coding:utf-8 -*-
from imutils.perspective import four_point_transform
# 图像处理函数,对OpenCV的简化
from imutils import contours
# 支持大量的维度数组与矩阵运算
import numpy as np
# OpenCV库(cv2)
import cv2 as cv
ANSWER_KEY_SCORE = {0: 1, 1: 4, 2: 0, 3: 3, 4: 1}
ANSWER_KEY = {0: "A", 1: "B", 2: "C", 3: "D", 4: "E"}
# 加载一个图片到opencv中
img = cv.imread('test01.jpg')
cv.imshow("orgin", img)
# 转化成灰度图片
gray = cv.cvtColor(img, cv.COLOR_BGR2GRAY)
cv.imshow("gray", gray)
gaussian_bulr = cv.GaussianBlur(gray, (5, 5), 0) # 高斯模糊
cv.imshow("gaussian", gaussian_bulr)
edged = cv.Canny(gaussian_bulr, 75, 200) # 边缘检测,灰度值小于2参这个值的会被丢弃,大于3参这个值会被当成边缘,在中间的部分,自动检测
cv.imshow("edged", edged)
# 寻找轮廓
image, cts, hierarchy = cv.findContours(edged.copy(), cv.RETR_EXTERNAL, cv.CHAIN_APPROX_SIMPLE)
# 给轮廓加标记,便于我们在原图里面观察,注意必须是原图才能画出红色,灰度图是没有颜色的
# cv.drawContours(img, cts, -1, (0,0,255), 3)
# 按面积大小对所有的轮廓排序
list = sorted(cts, key=cv.contourArea, reverse=True)
print("寻找轮廓的个数:", len(cts))
cv.imshow("draw_contours", img)
# 正确题的个数
correct_count = 0
for c in list:
# 周长,第1个参数是轮廓,第二个参数代表是否是闭环的图形
peri = 0.01 * cv.arcLength(c, True)
# 获取多边形的所有定点,如果是四个定点,就代表是矩形
approx = cv.approxPolyDP(c, peri, True)
# 打印定点个数
print("顶点个数:", len(approx))
if len(approx) == 4: # 矩形
# 透视变换提取原图内容部分
ox_sheet = four_point_transform(img, approx.reshape(4, 2))
# 透视变换提取灰度图内容部分
tx_sheet = four_point_transform(gray, approx.reshape(4, 2))
cv.imshow("ox", ox_sheet)
cv.imshow("tx", tx_sheet)
# 使用ostu二值化算法对灰度图做一个二值化处理
ret, thresh2 = cv.threshold(tx_sheet, 0, 255, cv.THRESH_BINARY_INV | cv.THRESH_OTSU)
cv.imshow("ostu", thresh2)
# 继续寻找轮廓
r_image, r_cnt, r_hierarchy = cv.findContours(thresh2.copy(), cv.RETR_EXTERNAL, cv.CHAIN_APPROX_SIMPLE)
print("找到轮廓个数:", len(r_cnt))
# 使用红色标记所有的轮廓
# cv.drawContours(ox_sheet,r_cnt,-1,(0,0,255),2)
# 把所有找到的轮廓,给标记出来
questionCnts = []
完整代码下载地址:基于Python OpenCV实现的答题卡识别判卷源代码

GitCode 天启AI是一款由 GitCode 团队打造的智能助手,基于先进的LLM(大语言模型)与多智能体 Agent 技术构建,致力于为用户提供高效、智能、多模态的创作与开发支持。它不仅支持自然语言对话,还具备处理文件、生成 PPT、撰写分析报告、开发 Web 应用等多项能力,真正做到“一句话,让 Al帮你完成复杂任务”。
更多推荐
所有评论(0)