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安装使用命令行交互模块pexpect的基础教程
May 12 Python
Python中死锁的形成示例及死锁情况的防止
Jun 14 Python
Python进阶-函数默认参数(详解)
May 18 Python
python 编码规范整理
May 05 Python
python smtplib模块自动收发邮件功能(一)
May 22 Python
python pygame实现方向键控制小球
May 17 Python
python安装numpy和pandas的方法步骤
May 27 Python
python通过链接抓取网站详解
Nov 20 Python
Python线程障碍对象Barrier原理详解
Dec 02 Python
Python scrapy爬取小说代码案例详解
Jul 09 Python
有趣的二维码:使用MyQR和qrcode来制作二维码
May 10 Python
Python中的变量与常量
Nov 11 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利用cookies实现购物车的方法
2014/12/10 PHP
php采集内容中带有图片地址的远程图片并保存的方法
2015/01/03 PHP
php序列化函数serialize() 和 unserialize() 与原生函数对比
2015/05/08 PHP
php实现微信公众号主动推送消息
2015/12/31 PHP
ThinkPHP框架安全实现分析
2016/03/14 PHP
PHP写的简单数字验证码实例
2017/05/23 PHP
通过修改referer下载文件的方法
2008/05/11 Javascript
JQuery 学习笔记 选择器之四
2009/07/23 Javascript
基于jQuery的ajax功能实现web service的json转化
2009/08/29 Javascript
javascript 定义初始化数组函数
2009/09/07 Javascript
firefox下input type=&quot;file&quot;的size是多大
2011/10/24 Javascript
JS中toFixed()方法引起的问题如何解决
2012/11/20 Javascript
js函数setTimeout延迟执行的简单介绍
2013/07/17 Javascript
jQuery避免$符和其他JS库冲突的方法对比
2014/02/20 Javascript
简述jQuery ajax的执行顺序
2016/01/05 Javascript
JavaScript常用代码书写规范的超全面总结
2016/09/11 Javascript
JavaScript数据结构之二叉树的计数算法示例
2017/04/13 Javascript
JS实现禁止用户使用Ctrl+鼠标滚轮缩放网页的方法
2017/04/28 Javascript
如何获取TypeScript的声明文件.d.ts
2018/05/01 Javascript
JS动画实现回调地狱promise的实例代码详解
2018/11/08 Javascript
微信小程序+腾讯地图开发实现路径规划绘制
2019/05/22 Javascript
python通过BF算法实现关键词匹配的方法
2015/03/13 Python
Python unittest 简单实现参数化的方法
2018/11/30 Python
Python单元和文档测试实例详解
2019/04/11 Python
PyQt5 QListWidget选择多项并返回的实例
2019/06/17 Python
浅谈Keras中shuffle和validation_split的顺序
2020/06/19 Python
CSS3中颜色线性渐变实战
2015/07/18 HTML / CSS
JDK安装目录下有哪些内容
2014/08/25 面试题
学习党课思想汇报
2013/12/29 职场文书
初婚未育证明
2014/01/15 职场文书
个人授权委托书样本
2014/09/13 职场文书
奉献家乡演讲稿
2014/09/16 职场文书
2014年保险业务员工作总结
2014/12/23 职场文书
Python绘制地图神器folium的新人入门指南
2021/05/23 Python
Python 处理表格进行成绩排序的操作代码
2021/07/26 Python
动作冒险《Hell Is Us》将采用虚幻5 消灭怪物探索王国
2022/04/13 其他游戏