整张答题卡识别原理(预处理)
2023-10-19 本文已影响0人
大龙10
书名:计算机视觉40例从入门到深度学习:OpenCV-Python
作者:李立宗
出版社:电子工业出版社
出版时间:2022-07-01
ISBN:9787121436857
第9章 答题卡识别
9.2 整张答题卡识别原理
- 整张答题卡识别的核心步骤就是单道题目的识别,在单道题目识别的基础上增加确定单道题目位置的功能即可实现整张答题卡的识别。
整张答题卡识别流程图如图9-6所示。
图9-6 整张答题卡识别流程图
9.2.1 图像预处理
1、图像预处理
主要完成读取图像、色彩空间转换、高斯滤波、Canny边缘检测、获取轮廓等。
-
色彩空间转换
将图像从RGB色彩空间转换到灰度空间,以便后续处理。 -
高斯滤波
主要用于对图像进行去噪处理。为了得到更好的去噪效果,可以根据需要加入形态学(如腐蚀、膨胀等)操作。 -
Canny边缘检测
是为了获取Canny边缘,以便更好地完成后续获取图像轮廓的操作。 -
获取轮廓
是指将图像内的所有轮廓提取出来。函数findContours可以根据参数查找图像内特定的轮廓。
整张答题卡在图像内拥有一个整体的外轮廓,因此可以使用上述方式将其查找出来。但图像内包含的噪声信息的轮廓也会被检索到。
2、程序
# -*- coding: utf-8 -*-
"""
Created on Wed Oct 18 16:40:16 2023
@author: dalong10
"""
import cv2
# ====读取原始图像====
img = cv2.imread('d:\\OpenCVpic\\TestPaper.jpg')
cv2.imshow('img', img)
gray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
# 高斯滤波
gaussian = cv2.GaussianBlur(gray,(5,5), 0)
edged =cv2.Canny(gaussian, 50, 200)
cv2.imshow('edged', edged)
cts, hierarchy = cv2.findContours(edged.copy(), cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)
cv2.drawContours(img,cts,-1,(0,0,255),3)
cv2.imshow("result",img) # 打印识别结果
cv2.waitKey()
cv2.destroyAllWindows()
运行结果