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正则表达式re模块详细介绍
May 29 Python
Python实现获取操作系统版本信息方法
Apr 08 Python
python字符串编码识别模块chardet简单应用
Jun 15 Python
Python 备份程序代码实现
Mar 06 Python
Python时间戳使用和相互转换详解
Dec 11 Python
利用python对Excel中的特定数据提取并写入新表的方法
Jun 14 Python
解决Python下json.loads()中文字符出错的问题
Dec 19 Python
Python 网络编程之UDP发送接收数据功能示例【基于socket套接字】
Oct 11 Python
python多线程案例之多任务copy文件完整实例
Oct 29 Python
Python 绘制可视化折线图
Jul 22 Python
Python基于locals返回作用域字典
Oct 17 Python
python中time、datetime模块的使用
Dec 14 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 变量未定义等错误的解决方法
2011/01/12 PHP
php 无法加载mcrypt.dll的解决办法
2013/04/03 PHP
解析PHP中的unset究竟会不会释放内存
2013/07/18 PHP
PHP获取昨天、今天及明天日期的方法
2016/02/03 PHP
扩展easyui.datagrid,添加数据loading遮罩效果代码
2010/11/02 Javascript
javascript动态加载三
2012/08/22 Javascript
js函数模拟显示桌面.scf程序示例
2014/04/20 Javascript
Javascript中3种实现继承的方法和代码实例
2014/08/12 Javascript
C++中的string类的用法小结
2015/08/07 Javascript
最实用的jQuery分页插件
2016/10/09 Javascript
JS中BOM相关知识点总结(必看篇)
2016/11/22 Javascript
移动端基础事件总结与应用
2017/01/12 Javascript
node.js基于mongodb的搜索分页示例
2017/01/22 Javascript
angularjs中回车键触发某一事件的方法
2017/04/24 Javascript
详解vue组件通信的三种方式
2017/06/30 Javascript
underscore之Chaining_动力节点Java学院整理
2017/07/10 Javascript
angularJs中跳转到指定的锚点实例($anchorScroll)
2018/08/31 Javascript
如何使用 vue + d3 画一棵树
2018/12/03 Javascript
使用vue-cli脚手架工具搭建vue-webpack项目
2019/01/14 Javascript
JavaScript实现页面中录音功能的方法
2019/06/04 Javascript
javascript+css实现进度条效果
2020/03/25 Javascript
对于Python中线程问题的简单讲解
2015/04/03 Python
python多进程和多线程究竟谁更快(详解)
2017/05/29 Python
在python3环境下的Django中使用MySQL数据库的实例
2017/08/29 Python
Python3.6 Schedule模块定时任务(实例讲解)
2017/11/09 Python
TensorFlow深度学习之卷积神经网络CNN
2018/03/09 Python
python 解决flask uwsgi 获取不到全局变量的问题
2019/12/22 Python
python中format函数如何使用
2020/06/22 Python
用python给csv里的数据排序的具体代码
2020/07/17 Python
使用HTML5技术开发一个属于自己的超酷颜色选择器
2013/09/22 HTML / CSS
Linux如何为某个操作添加别名
2015/02/05 面试题
投标承诺书范本
2014/03/27 职场文书
经济贸易系毕业生求职信
2014/05/31 职场文书
2015年手术室工作总结
2015/05/11 职场文书
推销搭讪开场白
2015/05/28 职场文书
Windows server 2012搭建FTP服务器
2022/04/29 Servers