侯体宗的博客
  • 首页
  • Hyperf版
  • beego仿版
  • 人生(杂谈)
  • 技术
  • 关于我
  • 更多分类
    • 文件下载
    • 文字修仙
    • 中国象棋ai
    • 群聊
    • 九宫格抽奖
    • 拼图
    • 消消乐
    • 相册

Python+OpenCV实现车牌字符分割和识别

Python  /  管理员 发布于 7年前   260

最近做一个车牌识别项目,入门级别的,十分简单。

车牌识别总体分成两个大的步骤:

一、车牌定位:从照片中圈出车牌

二、车牌字符识别

这里只说第二个步骤,字符识别包括两个步骤:

1、图像处理

原本的图像每个像素点都是RGB定义的,或者称为有R/G/B三个通道。在这种情况下,很难区分谁是背景,谁是字符,所以需要对图像进行一些处理,把每个RGB定义的像素点都转化成一个bit位(即0-1代码),具体方法如下:

①将图片灰度化

名字拗口,但是意思很好理解,就是把每个像素的RGB都变成灰色的RGB值,而灰色的RGB值是R=G=B的。具体怎么改变暂且忽略,因为OpenCV有封装好的函数。

②将灰度图片二值化

我们做第一步的目的就是为了让每个像素都可以转变成0或1。再解释一下,既然每个像素的RGB值都相等了,那么将这个值称为灰度值,假设一张灰度车牌图片中,背景的灰度值集中在180(十进制)左右,而字符的灰度值集中在20左右,那么我们规定一个中间值100,小于100的像素点就可以全部变成0,大于100的像素点可以全部变成1,这样就实现了二值化。

③旋转调平

这个就不说了。

④去燥

这个涉及另外一些方法,以后有时间再补充,入门项目不作要求。

2、图像切割和识别

①图像切割

切割可以很简单,也可以很难,关键是方法的选择。

在这就用最弱智的方法进行切割吧。

图片现在已经成为一个0-1矩阵了,其中要么0是背景而1是字符,或者1是背景而0是字符,那就简单粗暴地用每一列的0-1数来切割。

我先在这里假设图片几乎水平,而且几乎没有噪点,具体方法如下:

a.将每一列的1值和0值分别统计起来。

b.根据每一列的0-1总和变换来切割字符

②图像识别

将每一个字符的图片分割出来后,就可以根据模板来判断是哪个字符了。

简单的方法有两种:

a.逐个像素比对,如果一致则count加一,最后根据count值确定匹配结果。

b.投影匹配:将每行、每列的像素位统计起来,根据差值大小来确定匹配结果。

两种方法结合效果很好。

具体的识别之后再补充。

下面是字符分割的代码。

import cv2  # 1、读取图像,并把图像转换为灰度图像并显示 img = cv2.imread("chepai/6.png") # 读取图片 img_gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) # 转换了灰度化 cv2.imshow('gray', img_gray) # 显示图片 cv2.waitKey(0)  # 2、将灰度图像二值化,设定阈值是100 img_thre = img_gray cv2.threshold(img_gray, 100, 255, cv2.THRESH_BINARY_INV, img_thre) cv2.imshow('threshold', img_thre) cv2.waitKey(0)  # 3、保存黑白图片 cv2.imwrite('thre_res.png', img_thre)  # 4、分割字符 white = [] # 记录每一列的白色像素总和 black = [] # ..........黑色....... height = img_thre.shape[0] width = img_thre.shape[1] white_max = 0 black_max = 0 # 计算每一列的黑白色像素总和 for i in range(width):  s = 0 # 这一列白色总数  t = 0 # 这一列黑色总数  for j in range(height):  if img_thre[j][i] == 255:   s += 1  if img_thre[j][i] == 0:   t += 1  white_max = max(white_max, s)  black_max = max(black_max, t)  white.append(s)  black.append(t)  print(s)  print(t)  arg = False # False表示白底黑字;True表示黑底白字 if black_max > white_max:  arg = True  # 分割图像 def find_end(start_):  end_ = start_+1  for m in range(start_+1, width-1):  if (black[m] if arg else white[m]) > (0.95 * black_max if arg else 0.95 * white_max): # 0.95这个参数请多调整,对应下面的0.05   end_ = m   break  return end_  n = 1 start = 1 end = 2 while n < width-2:  n += 1  if (white[n] if arg else black[n]) > (0.05 * white_max if arg else 0.05 * black_max):  # 上面这些判断用来辨别是白底黑字还是黑底白字  # 0.05这个参数请多调整,对应上面的0.95  start = n  end = find_end(start)  n = end  if end-start > 5:   cj = img_thre[1:height, start:end]   cv2.imshow('caijian', cj)   cv2.waitKey(0) 

源程序中没有将图片输出,而只是显示出来,下面是执行结果

原图片:

灰度图片:

二值图片:(白底黑字)

分割后:

总体分割效果还是补充。但是遇到干扰较多的图片,比如左右边框太大、噪点太多,这样就不能分割出来,各位可以试一下不同的照片。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。


  • 上一条:
    Python实现从log日志中提取ip的方法【正则提取】
    下一条:
    python Opencv将图片转为字符画
  • 昵称:

    邮箱:

    0条评论 (评论内容有缓存机制,请悉知!)
    最新最热
    • 分类目录
    • 人生(杂谈)
    • 技术
    • linux
    • Java
    • php
    • 框架(架构)
    • 前端
    • ThinkPHP
    • 数据库
    • 微信(小程序)
    • Laravel
    • Redis
    • Docker
    • Go
    • swoole
    • Windows
    • Python
    • 苹果(mac/ios)
    • 相关文章
    • 在python语言中Flask框架的学习及简单功能示例(0个评论)
    • 在Python语言中实现GUI全屏倒计时代码示例(0个评论)
    • Python + zipfile库实现zip文件解压自动化脚本示例(0个评论)
    • python爬虫BeautifulSoup快速抓取网站图片(1个评论)
    • vscode 配置 python3开发环境的方法(0个评论)
    • 近期文章
    • 在windows10中升级go版本至1.24后LiteIDE的Ctrl+左击无法跳转问题解决方案(0个评论)
    • 智能合约Solidity学习CryptoZombie第四课:僵尸作战系统(0个评论)
    • 智能合约Solidity学习CryptoZombie第三课:组建僵尸军队(高级Solidity理论)(0个评论)
    • 智能合约Solidity学习CryptoZombie第二课:让你的僵尸猎食(0个评论)
    • 智能合约Solidity学习CryptoZombie第一课:生成一只你的僵尸(0个评论)
    • 在go中实现一个常用的先进先出的缓存淘汰算法示例代码(0个评论)
    • 在go+gin中使用"github.com/skip2/go-qrcode"实现url转二维码功能(0个评论)
    • 在go语言中使用api.geonames.org接口实现根据国际邮政编码获取地址信息功能(1个评论)
    • 在go语言中使用github.com/signintech/gopdf实现生成pdf分页文件功能(0个评论)
    • gmail发邮件报错:534 5.7.9 Application-specific password required...解决方案(0个评论)
    • 近期评论
    • 122 在

      学历:一种延缓就业设计,生活需求下的权衡之选中评论 工作几年后,报名考研了,到现在还没认真学习备考,迷茫中。作为一名北漂互联网打工人..
    • 123 在

      Clash for Windows作者删库跑路了,github已404中评论 按理说只要你在国内,所有的流量进出都在监控范围内,不管你怎么隐藏也没用,想搞你分..
    • 原梓番博客 在

      在Laravel框架中使用模型Model分表最简单的方法中评论 好久好久都没看友情链接申请了,今天刚看,已经添加。..
    • 博主 在

      佛跳墙vpn软件不会用?上不了网?佛跳墙vpn常见问题以及解决办法中评论 @1111老铁这个不行了,可以看看近期评论的其他文章..
    • 1111 在

      佛跳墙vpn软件不会用?上不了网?佛跳墙vpn常见问题以及解决办法中评论 网站不能打开,博主百忙中能否发个APP下载链接,佛跳墙或极光..
    • 2016-10
    • 2016-11
    • 2018-04
    • 2020-03
    • 2020-04
    • 2020-05
    • 2020-06
    • 2022-01
    • 2023-07
    • 2023-10
    Top

    Copyright·© 2019 侯体宗版权所有· 粤ICP备20027696号 PHP交流群

    侯体宗的博客