15- 答题卡识别及分数判定项目 (OpenCV系列) (项目十五)

该文详细介绍了如何利用OpenCV库对答题卡图像进行处理,包括图片读取、灰度图转换、高斯模糊、边缘检测、轮廓检测、透视变换、二值化处理以及轮廓排序等步骤。通过对轮廓的分析和筛选,确定答题卡的边界,并识别出选择的答案,最终进行分数判定。

项目要点

  • 图片读取 : img = cv2.imread('./images/test_01.png')
  • 灰度图:  gray = cv2.cvtColor(img, 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)[-2]    # 两个返回值 contours, hierarchy
  • 描绘轮廓cv2.drawContours(contours_img, cnts, -1, (0, 0, 255), 2)
  • 轮廓面积排序:  cnts = sorted(cnts, key = cv2.contourArea, reverse = True)
  • 计算轮廓周长:  perimeter = cv2.arcLength(c, True)
  • 得到近似轮廓:  approx = cv2.approxPolyDP(c, 0.15 * perimeter, True)
  • 计算变换矩阵:  M = cv2.getPerspectiveTransform(rect, dst)  # dst 为目标值
  • 通过坐标透视变换转换: warped = cv2.warpPerspective(image,M,(max_width, max_height))  # 注意传参
  • ret, thresh1 =
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值