基于Opencv的数字识别,使用轮廓检测对模板图像进行特征提取,计算模板图像的外轮廓和外接矩形,与识别图像进行模板匹配计算,取匹配度最高的模板图像为识别数字。其中运用二值化、礼帽、Sobel算子、梯度、闭运算等形态学操作对信用卡图像进行预处理,对提取到的特征进行阈值筛选,得到卡号区域。对卡号区域的数字依次计算轮廓,与模板进行匹配获取识别结果。
步骤:
一、读入模板图像
二、数字模板图像处理
1、模板图像预处理
1.1、转换为灰度图
1.2、转换为二值化图像
2、轮廓处理
2.1、计算轮廓
2.2、画出轮廓
2.3、对轮廓从左到右排序并储存
3、轮廓遍历
3.1、获取轮廓参数
3.2、计算轮廓外接矩形
3.3、resize成合适大小
3.4、存储外接矩形
三、读入识别的信用卡图像
四、信用卡图像处理
1、初始化卷积核
2、信用卡图像预处理
2.1、转换为灰度图
2.2、转换为二值化图像
2.3、resize成合适大小
3、特征提取
3.1、礼帽操作,突出更明亮的区域
3.2、使用Sobel算子求X方向梯度
3.3、闭操作(先膨胀,再腐蚀)将数字连在一起
3.4、二值化操作
3.5、闭操作(先膨胀,再腐蚀)将数字连在一起
4、轮廓处理
4.1、计算轮廓
4.2、画出轮廓
5、轮廓筛选
5.1、计算轮廓外接矩形
5.2、根据长宽比例,设置阈值,保留信用卡的卡号区域轮廓
5.3、对保留的轮廓储存,并按从左到右排序
6、卡号区域数字识别
6.1、获取卡号区域中单个数字轮廓
6.1.1、根据坐标,提取卡号区域轮廓
6.1.2、预处理,二值化操作
6.1.3、计算块中的单个数字轮廓,按从左到右排序并保存
6.2、单个数字模板匹配
6.2.1、遍历单个数字轮廓
6.2.1.1、获取轮廓参数
6.2.1.2、计算外接矩形
6.2.1.3、resize成模板大小
6.2.2、计算模板匹配得分
6.2.2.1、单个数字图像与模板图像匹配计算
6.2.2.2、获取匹配分数
6.2.2.3、保存匹配分数
6.2.3、获取匹配度最高的模板序号,存为该数值对应的值
6.3、用红色矩形画出卡号区域轮廓
6.4、在轮廓上面标注对应匹配的数字
6.5、得到识别结果
注意
1、用opencv读入图像,通道顺序为BGR,对图像进行处理转换为灰度图,只有一个通道,再对灰度图进行二值化操作,转换成二值图,也就是黑白图,只有两种像素值0和255
2、灰度图:用灰度表示的图像,R=G=B或者R、G、B按照比例系数合成单一通道的图像。
3、二值图:也叫黑白图,只有两种像素值0和255构成。
感谢:
灰度图与二值化 https://blog.csdn.net/flowerspring/article/details/115323748
计算机视觉入门到精通 https://www.bilibili.com/video/BV1EG4y1B7Wz?p=32&vd_source=c146fd3a1e762044e3d7bb5025779927