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 相关文章推荐
利用打码兔和超人打码自封装的打码类分享
Mar 16 Python
Python 2.7.x 和 3.x 版本的重要区别小结
Nov 28 Python
Python中使用Beautiful Soup库的超详细教程
Apr 30 Python
python简单的函数定义和用法实例
May 07 Python
Python的装饰器模式与面向切面编程详解
Jun 21 Python
python实现图片转字符小工具
Apr 30 Python
如何通过Python实现标签云算法
Jul 02 Python
Python OpenCV调用摄像头检测人脸并截图
Aug 20 Python
Python命令行click参数用法解析
Dec 19 Python
Python unittest 自动识别并执行测试用例方式
Mar 09 Python
django queryset相加和筛选教程
May 18 Python
python使用tkinter实现透明窗体上绘制随机出现的小球(实例代码)
May 17 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
PHPEXCEL 使用小记
2013/01/06 PHP
深入理解php printf() 输出格式化的字符串
2016/05/23 PHP
简单的自定义php模板引擎
2016/08/26 PHP
详解PHP安装mysql.so扩展的方法
2016/12/31 PHP
一个简单的js动画效果代码
2010/07/20 Javascript
Javascript实现仿WebQQ界面的“浮云”兼容 IE7以上版本及FF
2011/04/27 Javascript
js获取html参数及向swf传递参数应用介绍
2013/02/18 Javascript
js操作iframe兼容各种主流浏览器示例代码
2013/07/22 Javascript
jquery分页插件jquery.pagination.js实现无刷新分页
2016/04/01 Javascript
JS实现列表的响应式排版(推荐)
2016/09/01 Javascript
详解javascript立即执行函数表达式IIFE
2017/02/13 Javascript
zTree树形插件异步加载方法详解
2017/06/14 Javascript
cocos creator Touch事件应用(触控选择多个子节点的实例)
2017/09/10 Javascript
vue组件中的样式属性scoped实例详解
2018/10/30 Javascript
JavaScript常见鼠标事件与用法分析
2019/01/03 Javascript
javascript获取元素的计算样式
2019/05/24 Javascript
vue Treeselect下拉树只能选择第N级元素实现代码
2020/08/31 Javascript
[03:55]TI9战队采访——TNC Predator
2019/08/22 DOTA
python网络编程之文件下载实例分析
2015/05/20 Python
Python list操作用法总结
2015/11/10 Python
Python3转换html到pdf的不同解决方案
2019/03/11 Python
python连接、操作mongodb数据库的方法实例详解
2019/09/11 Python
详解用Python进行时间序列预测的7种方法
2020/03/13 Python
CSS3打造磨砂玻璃背景效果
2016/09/28 HTML / CSS
巴西食品补充剂在线零售商:Músculos na Web
2017/08/07 全球购物
拉斯维加斯城市观光通行证:Las Vegas Pass
2019/05/21 全球购物
如何为DataGridView添加一个定制的Column Type
2014/01/21 面试题
机关办公室岗位职责
2014/04/16 职场文书
上班迟到检讨书
2014/09/15 职场文书
会计稽核岗位职责
2015/04/13 职场文书
小学工作总结2015
2015/05/04 职场文书
历史博物馆观后感
2015/06/05 职场文书
中学团支部工作总结
2015/08/13 职场文书
导游词之桂林山水
2019/09/20 职场文书
使用CSS定位HTML元素的实现方法
2022/07/07 HTML / CSS
MySQL中TIMESTAMP类型返回日期时间数据中带有T的解决
2022/12/24 MySQL