python+OpenCV实现车牌号码识别
作者:PYH1009 发布时间:2023-04-13 14:50:20
标签:python,opencv,识别
基于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
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
来源:https://blog.csdn.net/PYH1009/article/details/102951768
0
投稿
猜你喜欢
- 首先要有一个概念:并不是一个语言支持函数,这个语言就可以叫做“函数式语言”。函数式语言中的函数(function),除了能被调用之外,还具有
- MySQL是一个小型关系型数据库管理系统,开发者为瑞典MySQLAB公司,在2008年1月16号被Sun公司收购。MySQL被广泛地应用在I
- 一、引用计数基础知识每个php变量存在一个叫 zval 的变量容器中。一个 zval 变量容器,除了包含变量的类型和值,还包括两个字节的额外
- lambda函数的定义   lambda函数是Python中常用的内置函数,又称为匿名
- 最后罗嗦一句,本人录入这篇文章用的机器上没有 ASP 环境,所以提供的代码未能进行测试,对这一点本人深表歉意。如果大家发现了代码中的任何问题
- int(10)int(20)分别代表什么意思储备知识在设计数据库表的时候,经常需要设计一个id字段,它的类型一般都是整型int,经常会遇到i
- 一、利用xpath进行(全程使用)driver.find_element_by_xpath()二、代码部分与图片内容打开淘宝网站,点击登录,
- 如下所示:<span style="font-size:18px;"></span>import
- 一、uni-app介绍??uni-app??? 是一个使用 ? ?Vue.js?? 开发所有前端应用的框架,开发者编写一套代码,可
- 本文实例讲述了Python基于二分查找实现求整数平方根的方法。分享给大家供大家参考,具体如下:x=int(raw_input('pl
- 这篇文章主要介绍了调用其他python脚本文件里面的类和方法过程解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习
- 前言在使用Python进行网络编程或者爬取一些自己感兴趣的东西时,总避免不了进行一些数据传输、存取等问题,Python的文件对象以及其他扩展
- 首先介绍一下什么是桑葚图?桑基图(Sankey diagram),即桑基能量分流图,也叫桑基能量平衡图。它是一种特定类型的流程图,图中延伸的
- vue.js 教程Vue.js(读音 /vjuː/, 类似于 view) 是一套构建用户界面的渐进式框架。Vue 只关注视图层, 采用自底向
- 这篇文章主要介绍了基于Python实现ComicReaper漫画自动爬取脚本过程解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具
- 1. 首先安装node,推荐偶数版本;好了之后检查一下: node -v;出现版本好即为安装成功;win10家庭版本的msi版本的时候出现无
- 1. 模拟场景实现需求为玩家拥有多个英雄,在部署好英雄之后,只用点击进攻,不用关心每个英雄具体自己的攻击手段!2099/12/29 14:1
- 如果只是想实现将jenkins的构建结果发送到企业微信进行通知,最简便的方式是安装Qy Wechat Notification Plugin
- 快速测试创建项目与appdjango-admin startproject mysitedjango-admin startapp app1
- 一、思路介绍在已有的单路径迷宫基础上打开一块合适的墙就可以构成2路径的迷宫。打开的墙不能和已有的路径过近。1。从开始和终点开始进行广度优先搜