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中用于检查英文字母大写的isupper()方法
May 19 Python
Python的Django应用程序解决AJAX跨域访问问题的方法
May 31 Python
用python找出那些被“标记”的照片
Apr 20 Python
Python实现PS滤镜的旋转模糊功能示例
Jan 20 Python
PyQT实现多窗口切换
Apr 20 Python
pandas 小数位数 精度的处理方法
Jun 09 Python
Python统计一个字符串中每个字符出现了多少次的方法【字符串转换为列表再统计】
May 05 Python
python使用pandas处理excel文件转为csv文件的方法示例
Jul 18 Python
python深copy和浅copy区别对比解析
Dec 26 Python
Python使用monkey.patch_all()解决协程阻塞问题
Apr 15 Python
Python实现初始化不同的变量类型为空值
Jun 02 Python
Python通过队列来实现进程间通信的示例
Oct 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
一个用于mysql的数据库抽象层函数库
2006/10/09 PHP
PHP版 汉字转码的实现详解
2013/06/09 PHP
PHP递归遍历多维数组实现无限分类的方法
2016/05/06 PHP
php获取给定日期相差天数的方法分析
2017/02/20 PHP
老生常谈PHP面向对象之注册表模式
2017/05/26 PHP
PHP中md5()函数的用法讲解
2019/03/30 PHP
javascript multibox 全选
2009/03/22 Javascript
javascript URL编码和解码使用说明
2010/04/12 Javascript
jquery+ajax实现直接提交表单实例分析
2016/06/17 Javascript
详解为Angular.js内置$http服务添加拦截器的方法
2016/12/20 Javascript
详解Vue中watch的高级用法
2018/05/02 Javascript
深入浅析JS中的严格模式
2018/06/04 Javascript
nodejs微信开发之授权登录+获取用户信息
2019/03/17 NodeJs
JS实现前端路由功能示例【原生路由】
2020/05/29 Javascript
jQuery实现异步上传一个或多个文件
2020/08/17 jQuery
Vue常用API、高级API的相关总结
2021/02/02 Vue.js
[53:52]EG vs VGJ.T 2018国际邀请赛小组赛BO2 第一场 8.16
2018/08/17 DOTA
pygame游戏之旅 载入小车图片、更新窗口
2018/11/20 Python
浅谈python实现Google翻译PDF,解决换行的问题
2018/11/28 Python
Python基本数据结构与用法详解【列表、元组、集合、字典】
2019/03/23 Python
安装Pycharm2019以及配置anconda教程的方法步骤
2019/11/11 Python
详解python中各种文件打开模式
2020/01/19 Python
PyCharm Anaconda配置PyQt5开发环境及创建项目的教程详解
2020/03/24 Python
利用python汇总统计多张Excel
2020/09/22 Python
python3爬虫中引用Queue的实例讲解
2020/11/24 Python
使用OpenCV校准鱼眼镜头的方法
2020/11/26 Python
Django权限控制的使用
2021/01/07 Python
咖啡为什么会有酸味?你喝到的咖啡為什麼是酸的?
2021/03/17 冲泡冲煮
Expedia泰国:预订机票、酒店和旅游包(航班+酒店)
2016/09/27 全球购物
社区中秋节活动方案
2014/01/29 职场文书
2014年创卫实施方案
2014/02/18 职场文书
市场开发计划书
2014/05/07 职场文书
学校感恩教育活动总结
2014/07/07 职场文书
详解PHP服务器如何在有限的资源里最大提升并发能力
2021/05/25 PHP
使用logback实现按自己的需求打印日志到自定义的文件里
2021/08/30 Java/Android
iSCSI服务器CHAP双向认证配置
2022/04/01 Servers