python+OpenCV实现车牌号码识别


Posted in Python onNovember 08, 2019

基于python+OpenCV的车牌号码识别,供大家参考,具体内容如下

车牌识别行业已具备一定的市场规模,在电子警察、公路卡口、停车场、商业管理、汽修服务等领域已取得了部分应用。一个典型的车辆牌照识别系统一般包括以下4个部分:车辆图像获取、车牌定位、车牌字符分割和车牌字符识别

1、车牌定位的主要工作是从获取的车辆图像中找到汽车牌照所在位置,并把车牌从该区域中准确地分割出来
这里所采用的是利用车牌的颜色(黄色、蓝色、绿色) 来进行定位

#定位车牌
def color_position(img,output_path):
 colors = [([26,43,46], [34,255,255]), # 黄色
    ([100,43,46], [124,255,255]), # 蓝色
    ([35, 43, 46], [77, 255, 255]) # 绿色
    ]
 hsv = cv2.cvtColor(img, cv2.COLOR_BGR2HSV)
 for (lower, upper) in colors:
  lower = np.array(lower, dtype="uint8") # 颜色下限
  upper = np.array(upper, dtype="uint8") # 颜色上限

  # 根据阈值找到对应的颜色
  mask = cv2.inRange(hsv, lowerb=lower, upperb=upper)
  output = cv2.bitwise_and(img, img, mask=mask)
  k = mark_zone_color(output,output_path)
  if k==1:
   return 1
  # 展示图片
  #cv2.imshow("image", img)
  #cv2.imshow("image-color", output)
  #cv2.waitKey(0)
 return 0

python+OpenCV实现车牌号码识别

2、将车牌提取出来

def mark_zone_color(src_img,output_img):
 #根据颜色在原始图像上标记
 #转灰度
 gray = cv2.cvtColor(src_img,cv2.COLOR_BGR2GRAY)

 #图像二值化
 ret,binary = cv2.threshold(gray,0,255,cv2.THRESH_BINARY)
 #轮廓检测
 x,contours,hierarchy = cv2.findContours(binary,cv2.RETR_TREE,cv2.CHAIN_APPROX_NONE)
 #drawing = img
 #cv2.drawContours(drawing, contours, -1, (0, 0, 255), 3) # 填充轮廓颜色
 #cv2.imshow('drawing', drawing)
 #cv2.waitKey(0)
 #print(contours)
 
 temp_contours = [] # 存储合理的轮廓
 car_plates=[]
 if len(contours)>0:
  for contour in contours:
   if cv2.contourArea(contour) > Min_Area:
    temp_contours.append(contour)
   car_plates = []
   for temp_contour in temp_contours:
    rect_tupple = cv2.minAreaRect(temp_contour)
    rect_width, rect_height = rect_tupple[1]
    if rect_width < rect_height:
     rect_width, rect_height = rect_height, rect_width
    aspect_ratio = rect_width / rect_height
    # 车牌正常情况下宽高比在2 - 5.5之间
    if aspect_ratio > 2 and aspect_ratio < 5.5:
     car_plates.append(temp_contour)
     rect_vertices = cv2.boxPoints(rect_tupple)
     rect_vertices = np.int0(rect_vertices)
   if len(car_plates)==1:
    oldimg = cv2.drawContours(img, [rect_vertices], -1, (0, 0, 255), 2)
    #cv2.imshow("che pai ding wei", oldimg)
    # print(rect_tupple)
    break

 #把车牌号截取出来
 if len(car_plates)==1:
  for car_plate in car_plates:
   row_min,col_min = np.min(car_plate[:,0,:],axis=0)
   row_max,col_max = np.max(car_plate[:,0,:],axis=0)
   cv2.rectangle(img,(row_min,col_min),(row_max,col_max),(0,255,0),2)
   card_img = img[col_min:col_max,row_min:row_max,:]
   cv2.imshow("img",img)
  cv2.imwrite(output_img + '/' + 'card_img' + '.jpg',card_img)
  cv2.imshow("card_img.",card_img)
  cv2.waitKey(0)
  cv2.destroyAllWindows()
  return 1
 return 0

python+OpenCV实现车牌号码识别

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

Python 相关文章推荐
Django 前后台的数据传递的方法
Aug 08 Python
分析Python中解析构建数据知识
Jan 20 Python
python使用tomorrow实现多线程的例子
Jul 20 Python
django解决订单并发问题【推荐】
Jul 31 Python
TensorFlow基于MNIST数据集实现车牌识别(初步演示版)
Aug 05 Python
使用Python将字符串转换为格式化的日期时间字符串
Sep 01 Python
10行Python代码计算汽车数量的实现方法
Oct 23 Python
Django将默认的SQLite更换为MySQL的实现
Nov 18 Python
Python常用库大全及简要说明
Jan 17 Python
Python实现结构体代码实例
Feb 10 Python
Python学习之路安装pycharm的教程详解
Jun 17 Python
如何用tempfile库创建python进程中的临时文件
Jan 28 Python
python实现飞机大战小游戏
Nov 08 #Python
python 基于dlib库的人脸检测的实现
Nov 08 #Python
numpy数组做图片拼接的实现(concatenate、vstack、hstack)
Nov 08 #Python
python实现身份证实名认证的方法实例
Nov 08 #Python
Python Django框架模板渲染功能示例
Nov 08 #Python
Python Django中间件,中间件函数,全局异常处理操作示例
Nov 08 #Python
Django框架下静态模板的继承操作示例
Nov 08 #Python
You might like
网友原创的PHP模板类代码
2008/09/07 PHP
php下关于Cannot use a scalar value as an array的解决办法
2010/08/08 PHP
PHP5中虚函数的实现方法分享
2011/04/20 PHP
深入浅析PHP的session反序列化漏洞问题
2017/06/15 PHP
基于PHP+Mysql简单实现了图书购物车系统的实例详解
2020/08/06 PHP
jscript之List Excel Color Values
2007/06/13 Javascript
基于jquery的商品展示放大镜
2010/08/07 Javascript
EasyUI的treegrid组件动态加载数据问题的解决办法
2011/12/11 Javascript
用按钮控制iframe显示的网页实现方法
2013/02/04 Javascript
jQuery中filter()和find()的区别深入了解
2013/09/25 Javascript
javaScript基础语法介绍
2015/02/28 Javascript
深入浅析Node.js 事件循环
2015/12/20 Javascript
使用 Node.js 开发资讯爬虫流程
2018/01/07 Javascript
微信小程序WebSocket实现聊天对话功能
2018/07/06 Javascript
在vue中实现点击选择框阻止弹出层消失的方法
2018/09/15 Javascript
Vue组件之高德地图地址选择功能的实例代码
2019/06/21 Javascript
vue 关闭浏览器窗口的时候,清空localStorage的数据示例
2019/11/06 Javascript
实例分析JS中的相等性判断===、 ==和Object.is()
2019/11/17 Javascript
原生JS利用transform实现banner的无限滚动示例代码
2020/06/15 Javascript
浅谈vue中使用编辑器vue-quill-editor踩过的坑
2020/08/03 Javascript
js实现菜单跳转效果
2020/12/11 Javascript
分析Python的Django框架的运行方式及处理流程
2015/04/08 Python
使用selenium和pyquery爬取京东商品列表过程解析
2019/08/15 Python
python matplotlib如何给图中的点加标签
2019/11/14 Python
Jupyter notebook设置背景主题,字体大小及自动补全代码的操作
2020/04/13 Python
介绍一下Linux文件的记录形式
2013/09/29 面试题
一年级数学教学反思
2014/02/01 职场文书
《小松树和大松树》教学反思
2014/02/20 职场文书
幼儿园教师岗位职责
2014/03/17 职场文书
初中英语课后反思
2014/04/25 职场文书
党员组织生活会发言材料
2014/10/17 职场文书
2016年寒假学习心得体会
2015/10/09 职场文书
离婚协议书范本(2016最新版)
2016/03/18 职场文书
浅析InnoDB索引结构
2021/04/05 MySQL
十大动画制作软件,Adobe产品上榜两款,第一是行业标准软件
2022/03/18 杂记
带你了解Java中的ForkJoin
2022/04/28 Java/Android