python 机器识别_opencv+python机读卡识别整合版

稍微整理了一下这个系列的一二三四章,可能看着更舒服吧……这个系列的解决方案不止一种,调参的方法也是各种各样,反正能够满足需求就极好了

1.预处理

这次的机读卡识别项目来源暑期培训,主要包括内容一张手机拍摄的机读卡位置定位,识别其中选择题模块及少量数字识别,给出样例图片:

2965979f18459a10865fbf8900d8ddf1.png

预处理目的:

对于这个识别问题而言,把图像变成二值图应该是最简单粗暴的方法了。为了找准边界,才能良好切割。而对于边缘检测的函数也只能传入灰度图……

1.1.环境配置: 环境是python3.5的,大体部分需要配置的是numpy+mlk版本,scipy,来支持opencv,另外辅助以imutils,这个包里面含有4点变换函数以及matplotlib来辅助绘图

import cv2

import matplotlib.pyplot as plt

import imutils

from imutils.perspective import four_point_transform

1.2.图片预处理 为了方便找出图片的4个顶点,所以需要一次自适应二值化,为了使图片效果更好,所以在二值化之前还加了一层高斯滤波

a3a1a23b8a42b1d68ad4d41c7b1b961c.png

#读入图片

image = cv2.imread("test10.jpg")

#转换为灰度图像

gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)

#高斯滤波

blurred = cv2.GaussianBlur(gray, (3, 3), 0)

#自适应二值化方法

blurred=cv2.adaptiveThreshold(blurred,255,cv2.ADAPTIVE_THRESH_MEAN_C,cv2.THRESH_BINARY,51,2)

'''

adaptiveThreshold函数:第一个参数src指原图像,原图像应该是灰度图。

第二个参数x指当像素值高于(有时是小于)阈值时应该被赋予的新的像素值

第三个参数adaptive_method 指: CV_ADAPTIVE_THRESH_MEAN_C 或 CV_ADAPTIVE_THRESH_GAUSSIAN_C

第四个参数threshold_type  指取阈值类型:必须是下者之一

•  CV_THRESH_BINARY,

• CV_THRESH_BINARY_INV

第五个参数 block_size 指用来计算阈值的象素邻域大小: 3, 5, 7, ...

第六个参数param1    指与方法有关的参数。对方法CV_ADAPTIVE_THRESH_MEAN_C 和 CV_ADAPTIVE_THRESH_GAUSSIAN_C, 它是一个从均值或加权均值提取的常数, 尽管它可以是负数。

'''

#这一步可有可无,主要是增加一圈白框,以免刚好卷子边框压线后期边缘检测无果。好的样本图就不用考虑这种问题

blurred=cv2.copyMakeBorder(blurred,5,5,5,5,cv2.BORDER_CONSTANT,value=(255,255,255))

2.图像切割

图像切割的目的是将图像定个便于识别的样子。比如这里四角变换结束以后会吧图像变为2400*2800的大小,无论是什么样的案例图片,都是这个格式,这样最后

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值