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之正规地说一句话
Sep 28 Python
Python open()文件处理使用介绍
Nov 30 Python
Python实现批量读取word中表格信息的方法
Jul 30 Python
Python读取一个目录下所有目录和文件的方法
Jul 15 Python
简述:我为什么选择Python而不是Matlab和R语言
Nov 14 Python
Python实现字符串匹配算法代码示例
Dec 05 Python
详解python selenium 爬取网易云音乐歌单名
Mar 28 Python
python实现坦克大战游戏 附详细注释
Mar 27 Python
python保存字典和读取字典的实例代码
Jul 07 Python
Django REST框架创建一个简单的Api实例讲解
Nov 05 Python
Python使用sys.exc_info()方法获取异常信息
Jul 23 Python
python定义具名元组实例操作
Feb 28 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清除bom示例
2014/03/03 PHP
php中stream(流)的用法
2014/03/25 PHP
CI框架实现cookie登陆的方法详解
2016/05/18 PHP
PHP实现搜索时记住状态的方法示例
2018/05/11 PHP
在多个页面使用同一个HTML片段的代码
2011/03/04 Javascript
javascript实现上传图片并预览的效果实现代码
2011/04/11 Javascript
纯Javascript实现Windows 8 Metro风格实现
2013/10/15 Javascript
JS验证邮箱格式是否正确的代码
2013/12/05 Javascript
jquery设置text的值示例(设置文本框 DIV 表单值)
2014/01/06 Javascript
JavaScript中指定函数名称的相关方法
2015/06/04 Javascript
在JavaScript中处理字符串之link()方法的使用
2015/06/08 Javascript
基于Jquery插件Uploadify实现实时显示进度条上传图片
2020/03/26 Javascript
javascript中json基础知识详解
2017/01/19 Javascript
浅谈js中用$(#ID)来作为选择器的问题(id重复的时候)
2017/02/14 Javascript
Nodejs 获取时间加手机标识的32位标识实现代码
2017/03/07 NodeJs
jQuery插件zTree实现删除树节点的方法示例
2017/03/08 Javascript
详解AngularJS脏检查机制及$timeout的妙用
2017/06/19 Javascript
JavaScript生成图形验证码
2020/08/24 Javascript
基于构造函数的五种继承方法小结
2017/07/27 Javascript
基于JavaScript中标识符的命名规则介绍
2018/01/06 Javascript
一份超级详细的Vue-cli3.0使用教程【推荐】
2018/11/15 Javascript
微信小程序 调用微信授权窗口相关问题解决
2019/07/25 Javascript
JavaScript代码模拟鼠标自动点击事件示例
2020/08/07 Javascript
python 计算文件的md5值实例
2017/01/13 Python
解决pycharm运行时interpreter为空的问题
2018/10/29 Python
pycharm运行程序时看不到任何结果显示的解决
2020/02/21 Python
聊聊python中的异常嵌套
2020/09/01 Python
python3中calendar返回某一时间点实例讲解
2020/11/18 Python
柒牌官方商城:中国男装优秀品牌
2017/06/30 全球购物
捷克浴室和厨房设备购物网站:SIKO
2018/08/11 全球购物
食品营养与检测应届生求职信
2013/11/08 职场文书
演讲比赛获奖感言
2014/02/02 职场文书
会计系毕业求职信
2014/08/07 职场文书
2014年班级工作总结
2014/11/14 职场文书
2014年学校后勤工作总结
2014/12/06 职场文书
学生检讨书范文
2019/06/24 职场文书