车牌号码识别程序分享

本文介绍了基于Python和OpenCV的车牌识别系统,包括车辆图像获取、车牌定位、字符分割和字符识别四个步骤。通过图像预处理、边缘检测、轮廓识别等技术定位车牌,再用支持向量机进行字符识别。
摘要由CSDN通过智能技术生成

   本文参考博客使用opencv进行车牌提取及识别进行。程序部分为网上获取程序修改而来,并在其中加入了自己的注释和理解

采用python+opencv进行程序编写。

课程设计内容分享

程序下载请前往https://download.csdn.net/download/chenkz123/10841956

一个典型的车辆牌照识别系统一般包括以下4个部分:车辆图像获取、车牌定位、车牌字符分割和车牌字符识别 。

车辆图像获取

      现有的车辆图像获取方式主要有两种:一种是由彩色摄像机和图像采集卡组成,其工作过程是:当车辆检测器(如地感线圈、红外线等)检测到车辆进入拍摄范围时,向主机发送启动信号,主机通过采集卡采集一幅车辆图像,为了提高系统对天气、环境、光线等的适应性,摄像机一般采用自动对焦和自动光圈的一体化机,同时光照不足时还可以自动补光照明,保证拍摄图片的质量;另一种是由数码照相机构成,其工作过程是:当车辆检测器检测到车辆进入拍摄范围时,直接给数码照相机发送一个信号,数码相机自动拍摄一幅车辆图像,再传到主机上,数码相机的一些技术参数可以通过与数码相机相连的主机进行设置,光照不足时也需要自动开启补光照明,保证拍摄图片的质量。

       为了方便起见,这里选用网上获取的图片。

车牌定位

车牌定位的主要工作是从获取的车辆图像中找到汽车牌照所在位置,并把车牌从该区域中准确地分割出来,供字符分割使用。因此,牌照区域的确定是影响系统性能的重要因素之一,牌照的定位与否直接影响到字符分割和字符识别的准确率。目前车牌定位的方法很多,但总的来说可以分为以下4类:(1)基于颜色的分割方法,这种方法主要利用颜色空间的信息,实现车牌分割,包括彩色边缘算法、颜色距离和相似度算法等;(2)基于纹理的分割方法,这种方法主要利用车牌区域水平方向的纹理特征进行分割,包括小波纹理、水平梯度差分纹理等;(3)基于边缘检测的分割方法;(4)基于数学形态法的分割方法。 为了代码实现上的方便,采用的是基于边缘检测的分割方法。

 在读入图片之后,通过resize限制图片的长和高。再对利用高斯滤波对图像进行去噪,之后利用灰度化将图像转为单通道灰度图,为之后的图像处理做准备。

        if type(car_pic) == type(""):
            img = imreadex(car_pic)   # 读入图片
        else:
            img = car_pic
        pic_hight, pic_width = img.shape[:2]   # 获取图片大小
        if pic_width > MAX_WIDTH:   # 限制大小
            resize_rate = MAX_WIDTH / pic_width
            img = cv2.resize(img, (MAX_WIDTH, int(pic_hight * resize_rate)), interpolation=cv2.INTER_AREA)

        if pic_hight > MAX_HEIGHT:   # 限制大小
            resize_rate = MAX_HEIGHT / pic_hight
            img = cv2.resize(img, (int(pic_width * resize_rate), MAX_HEIGHT), interpolation=cv2.INTER_AREA)
        # cv2.imshow('resize', img)   # 显示resize后图像
        blur = self.cfg["blur"]
        # 高斯去噪
        if blur > 0:
            img = cv2.GaussianBlur(img, (blur, blur), 0)  # 图片分辨率调整(高斯滤波)
        oldimg = img

        # cv2.imshow('GaussianBlur', oldimg)  # 显示高斯去燥后图像

        img = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)   # 转灰度

        # cv2.imshow('Gray', img)    # 高斯去燥转灰度后图像
# 读取图片文件
def imreadex(filename):
    return cv2.imdecode(np.fromfile(filename, dtype=np.uint8), cv2.IMREAD_COLOR)

 采用开运算断开较窄的狭颈和消除细的突出物,采用图像叠加(灰度图-开操作图)突显字符等部分,效果如下图所示。随后进行二值化,再利用Canny算子进行边缘检测,利用闭运算及开运算使图像边缘成为一个整体。

评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值