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 相关文章推荐
python抓取京东商城手机列表url实例代码
Dec 18 Python
Python中实现对list做减法操作介绍
Jan 09 Python
Python创建系统目录的方法
Mar 11 Python
python添加模块搜索路径方法
Sep 11 Python
Python实现操纵控制windows注册表的方法分析
May 24 Python
解决Mac下使用python的坑
Aug 13 Python
python的range和linspace使用详解
Nov 27 Python
Python字典中的值为列表或字典的构造实例
Dec 16 Python
python属于软件吗
Jun 18 Python
opencv 图像腐蚀和图像膨胀的实现
Jul 07 Python
Python爬取豆瓣数据实现过程解析
Oct 27 Python
python飞机大战游戏实例讲解
Dec 04 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面向对象学习笔记之二 生成对象的设计模式
2012/10/06 PHP
php并发对MYSQL造成压力的解决方法
2013/02/21 PHP
php保存信息到当前Session的方法
2015/03/16 PHP
php生成图片验证码
2015/06/09 PHP
PHP5.5迭代生成器用法实例详解
2016/03/16 PHP
PHPMailer发送邮件
2016/12/28 PHP
Chrome中模态对话框showModalDialog返回值问题的解决方法
2010/05/25 Javascript
基于jquery循环map功能的代码
2011/02/26 Javascript
jquery jqPlot API 中文使用教程(非常强大的图表工具)
2011/08/15 Javascript
基于JQUERY的多级联动代码
2012/01/24 Javascript
JavaScript中的面向对象介绍
2012/06/30 Javascript
window.location.href = window.location.href 跳转无反应 a超链接onclick事件写法
2013/08/21 Javascript
JavaScript新窗口与子窗口传值详解
2014/02/11 Javascript
JS实现将人民币金额转换为大写的示例代码
2014/02/13 Javascript
深入理解javascript中concat方法
2016/12/12 Javascript
jQuery的三种bind/One/Live/On事件绑定使用方法
2017/02/23 Javascript
Vue.js实现一个漂亮、灵活、可复用的提示组件示例
2017/03/17 Javascript
10 种最常见的 Javascript 错误(频率最高)
2018/02/08 Javascript
Angular5给组件本身的标签添加样式class的方法
2018/04/07 Javascript
微信开发之企业付款到银行卡接口开发的示例代码
2018/09/18 Javascript
可拖拽组件slider.js使用方法详解
2020/12/04 Javascript
python实现数通设备端口监控示例
2014/04/02 Python
详解Python迭代和迭代器
2016/03/28 Python
Python原始字符串与Unicode字符串操作符用法实例分析
2017/07/22 Python
NumPy 数学函数及代数运算的实现代码
2018/07/18 Python
python 发送json数据操作实例分析
2019/10/15 Python
用 Python 制作地球仪的方法
2020/04/24 Python
使用css实现android系统的loading加载动画
2019/07/25 HTML / CSS
移动端HTML5开发神器之vconsole详解
2020/12/15 HTML / CSS
Haglöfs瑞典官方网站:haglofs火柴棍,欧洲顶级户外品牌
2018/10/18 全球购物
J2EE的优越性主要表现在哪些方面
2016/03/28 面试题
毕业生自荐信
2013/12/14 职场文书
小学生中国梦演讲稿
2014/04/23 职场文书
小学生春游活动方案
2014/08/20 职场文书
python中redis包操作数据库的教程
2022/04/19 Python
Android Canvas绘制文字横纵向对齐
2022/06/05 Java/Android