项目要点
- 图片读取 : 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 =

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

被折叠的 条评论
为什么被折叠?



