Python下使用opencv等库进行国内答题卡选择题图像识别
来源:互联网 发布:科普知识网络竞赛答案 编辑:程序博客网 时间:2024/04/28 21:39
背景:由于女票是一名人民教师,祖国园丁,无奈学校甚微简陋,连答题卡机器都没有,选择题只能老师人手一题一题的改。于是就有了这篇文章,我希望通过Python+opencv+imutils等库对答题卷的选择题部分进行图像识别,然后程序改题,最后得出统计数据,起码在客观选择题部分提高结题效率。
由于Python、opencv均为新手,所以以此为学习日记…
从试卷中挑选出选择题部分
# -*- coding: UTF-8 -*-# 引入必要的库from imutils.perspective import four_point_transformfrom imutils import contoursimport numpy as npimport argparseimport imutilsimport cv2 # 构建命令行参数解析并分析参数# 对应使用方式 python test_grader.py --image images/test_01.pngap = argparse.ArgumentParser()ap.add_argument("-i", "--image", required=True, help="path to the input image")args = vars(ap.parse_args()) # 构建答案字典,键为题目号,值为正确答案ANSWER_KEY = {0: 1, 1: 4, 2: 0, 3: 3, 4: 1} # 加载图片,将它转换为灰阶,轻度模糊,然后边缘检测。image = cv2.imread(args["image"])gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)blurred = cv2.GaussianBlur(gray, (5, 5), 0)edged = cv2.Canny(blurred, 75, 200) # 从边缘图中寻找轮廓,然后初始化答题卡对应的轮廓cnts = cv2.findContours(edged.copy(), cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)cnts = cnts[0] if imutils.is_cv2() else cnts[1]docCnt = None # 确保至少有一个轮廓被找到if len(cnts) > 0: # 将轮廓按大小降序排序 cnts = sorted(cnts, key=cv2.contourArea, reverse=True) # 对排序后的轮廓循环处理 for c in cnts: # 获取近似的轮廓 peri = cv2.arcLength(c, True) approx = cv2.approxPolyDP(c, 0.02 * peri, True) # 如果我们的近似轮廓有四个顶点,那么就认为找到了答题卡 if len(approx) == 4: docCnt = approx break# 对原始图像和灰度图都进行四点透视变换paper = four_point_transform(image, docCnt.reshape(4, 2))warped = four_point_transform(gray, docCnt.reshape(4, 2)) # cv2.imshow("Original", image)cv2.imshow("exam", warped)cv2.waitKey(0)
原图:
效果图:
将选择题每题挑选出来
参考文章:
- python CV 趣味项目 答题卡识别
- opencv识别答题卡
0 0
- Python下使用opencv等库进行国内答题卡选择题图像识别
- Opencv识别答题卡
- Opencv识别答题卡
- opencv答题卡识别 (一)
- 七.使用OpenCv进行图像颜色识别
- C#中使用OpenCV等库进行图像处理
- C#中使用OpenCV等库进行图像处理
- 图像识别的答题卡计分
- iOS中使用opencv进行图像识别操作
- python CV 趣味项目 答题卡识别
- 使用CloudSight API进行图像识别的Python脚本
- Win7下安装Python图像处理库PIL、pytesser、tesseract进行验证码识别
- linux下使用python进行opencv开发
- 答题卡图像识别 需求分析、市场分析和技术实现
- android中利用opencv进行图像识别
- 使用opencv进行数字识别
- 答题卡识别软件
- 国内图像识别行业
- Anroid 编译过程分析
- Delphi接口的底层实现
- linux常用命令_使用及介绍
- 数据库的垂直切分和水平切分
- 【译】Unity3D Shader 新手教程(4/6) —— 卡通shader(入门版)
- Python下使用opencv等库进行国内答题卡选择题图像识别
- Java基础加强总结(一)——注解(Annotation)
- 设计模式-观察者模式
- Struts从2.1升级到2.3版本过程
- 谈谈怎么实现Oracle数据库分区表
- 数据库系统概论学习笔记(二):更多的概念
- linux安装图形化界面
- invalidate() vs postInvalidate() vs requestLayout()
- 图解SQL的Join