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 相关文章推荐
解决Pycharm下面出现No R interpreter defined的问题
Oct 29 Python
Python中函数的基本定义与调用及内置函数详解
May 13 Python
对Python强大的可变参数传递机制详解
Jun 13 Python
python面向对象 反射原理解析
Aug 12 Python
Python生成验证码、计算具体日期是一年中的第几天实例代码详解
Oct 16 Python
python 图片二值化处理(处理后为纯黑白的图片)
Nov 01 Python
python3获取文件中url内容并下载代码实例
Dec 27 Python
python 实现将Numpy数组保存为图像
Jan 09 Python
pyautogui自动化控制鼠标和键盘操作的步骤
Apr 01 Python
使用pycharm和pylint检查python代码规范操作
Jun 09 Python
Python tkinter实现日期选择器
Feb 22 Python
深入理解python多线程编程
Apr 18 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原生模板引擎 最简单的模板引擎
2012/04/25 PHP
腾讯QQ微博API接口获取微博内容
2013/10/30 PHP
Smarty变量调节器失效的解决办法
2014/08/20 PHP
Laravel实现构造函数自动依赖注入的方法
2016/03/16 PHP
yii2利用自带UploadedFile实现上传图片的示例
2017/02/16 PHP
PHP钩子实现方法解析
2019/05/21 PHP
使用Laravel中的查询构造器实现增删改查功能
2019/09/03 PHP
PHP使用Http Post请求发送Json对象数据代码解析
2020/07/16 PHP
ie和firefox中img对象区别的困惑
2006/12/27 Javascript
JavaScript.Encode手动解码技巧
2010/07/14 Javascript
javascript常用方法、属性集合及NodeList 和 HTMLCollection 的浏览器差异
2010/12/25 Javascript
JavaScript拆分字符串时产生空字符的解决方案
2014/09/26 Javascript
3种Jquery限制文本框只能输入数字字母的方法
2014/12/03 Javascript
jQuery中$.each()函数的用法引申实例
2016/05/12 Javascript
JS仿京东移动端手指拨动切换轮播图效果
2020/04/10 Javascript
详解js产生对象的3种基本方式(工厂模式,构造函数模式,原型模式)
2017/01/09 Javascript
Vue.js路由vue-router使用方法详解
2017/03/20 Javascript
浅谈es6语法 (Proxy和Reflect的对比)
2017/10/24 Javascript
vue2.0 子组件改变props值,并向父组件传值的方法
2018/03/01 Javascript
JavaScript学习笔记之数组基本操作示例
2019/01/09 Javascript
ES6 Iterator接口和for...of循环用法分析
2019/07/31 Javascript
vue-cli3.0实现一个多页面应用的历奇经历记录总结
2020/03/16 Javascript
js中复选框的取值及赋值示例详解
2020/10/18 Javascript
Vue实现指令式动态追加小球动画组件的步骤
2020/12/18 Vue.js
Python logging管理不同级别log打印和存储实例
2018/01/19 Python
Python之批量创建文件的实例讲解
2018/05/10 Python
django+mysql的使用示例
2018/11/23 Python
python多任务之协程的使用详解
2019/08/26 Python
python基于socket函数实现端口扫描
2020/05/28 Python
移动端HTML5开发神器之vconsole详解
2020/12/15 HTML / CSS
ProBikeKit新西兰:自行车套件,跑步和铁人三项装备
2017/04/05 全球购物
日本热销NO.1胶原蛋白冻:Aishitoto爱希特多
2019/06/20 全球购物
哈理工毕业生的求职信
2013/12/22 职场文书
村委会主任先进事迹
2014/01/15 职场文书
Django中session进行权限管理的使用
2021/07/09 Python
python 中的jieba分词库
2021/11/23 Python