基于HyperLPR的车牌识别(十)

2021SC@SDUSC

源代码下载地址:HyperLPR: HyperLRP是一个开源的、基于深度学习高性能中文车牌识别库,由北京智云视图科技有限公司开发,支持PHP、C/C++、Python语言,Windows/Mac/Linux/Android/IOS 平台。

源码配置的详情见第一篇分析

这次主要分析detect.detectPlateRough()函数,当前文件引入了hyperlpr_py3文件夹下的detect.py文件的detectPlateRough()函数,含义为检测板材粗糙度,对图片进行粗糙度检测并进行有效修剪

def detectPlateRough(image_gray,resize_h = 720,en_scale =1.08 ,top_bottom_padding_rate = 0.05):
    print(image_gray.shape)
 
    if top_bottom_padding_rate>0.2:
        print("error:top_bottom_padding_rate > 0.2:",top_bottom_padding_rate)
        exit(1)
 
    height = image_gray.shape[0]
    padding =    int(height*top_bottom_padding_rate)
    scale = image_gray.shape[1]/float(image_gray.shape[0])
 
    image = cv2.resize(image_gray, (int(scale*resize_h), resize_h))
 
    image_color_cropped = image[padding:resize_h-padding,0:image_gray.shape[1]]
 
    image_gray = cv2.cvtColor(image_color_cropped,cv2.COLOR_RGB2GRAY)
 
    watches = watch_cascade.detectMultiScale(image_gray, en_scale, 2, minSize=(36, 9),maxSize=(36*40, 9*40))
 
    cropped_images = []
    for (x, y, w, h) in watches:
        cropped_origin = cropped_from_image(image_color_cropped, (int(x), int(y), int(w), int(h)))
        x -= w * 0.14
        w += w * 0.28
        y -= h * 0.6
        h += h * 1.1;
 
        cropped = cropped_from_image(image_color_cropped, (int(x), int(y), int(w), int(h)))
 
 
        cropped_images.append([cropped,[x, y+padding, w, h],cropped_origin])
    return cropped_images

传入的形参image_gray,resize_h = 720,en_scale =1.08 ,top_bottom_padding_rate = 0.05的含义分别为图片本身,图片调整大小的高度,图片缩放比例以及头部底部与内边距的比率

对头部底部与内边距的比率进行判断,若不在规定大小则结束该错误退出改该编译器

height = image_gray.shape[0]
padding =    int(height*top_bottom_padding_rate)
scale = image_gray.shape[1]/float(image_gray.shape[0])
获取图片的垂直高度,内边距大小以及图片宽与高之比

image = cv2.resize(image_gray, (int(scale*resize_h), resize_h))
引用了库cv2,函数resize()是根据传入的图片本身image_gray,图片调整的宽度以及图片调整的高度对图片进行缩放,返回一个完成缩放的图片

image_color_cropped = image[padding:resize_h-padding,0:image_gray.shape[1]]


函数image_color_cropped()是根据颜色来裁剪图片,其调用了opencv中的方法,目的是裁剪出车牌照中的车牌图片,除去其他的无关的东西,为之后的分析图片做出有效处理

image_gray = cv2.cvtColor(image_color_cropped,cv2.COLOR_RGB2GRAY)


引用库cv2,函数cvtColor()是根据已裁剪完成的图片image_color_cropped并将其转换成灰度图片

 watches = watch_cascade.detectMultiScale(image_gray, en_scale, 2, minSize=(36, 9),maxSize=(36*40, 9*40))


 
#watch_cascade来自
watch_cascade = cv2.CascadeClassifier('./model/cascade.xml')
引用库cv2,调用了函数CascadeClassifier()与函数detectMultiScale()

函数CascadeClassifier():是Opencv中做人脸检测的时候的一个级联分类器。并且既可以使用Haar,也可以使用LBP特征

函数detectMultiScale():opencv2中人脸检测使用的是 detectMultiScale函数。它可以检测出图片中所有的人脸,并将人脸用vector保存各个人脸的坐标、大小(用矩形表示)

则通过传输的数据可知,调用这两个函数的目的为对于经过处理后的图片,识别出车牌的具体的位置和大小并且作为数组储存起来
 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值