完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
【MYD-JX8MMA7】 十二、OpenCV 提取车牌 一、基本原理 一直都很好奇摄像头是如何实现车牌的采集和识别的,今天将个人的学习经验开发经验整理成册供大家参考。 车牌识别的基本原理,其中主要包含以下三个流程: 1.提取车牌:将车牌从复杂的背景中提取出来; 2.拆分字符:将车牌划分为一个个独立的字符; 3.识别字符:识别从车牌上提取的一个个字符; 二、提取车牌 提取车牌是指将车牌从复杂的环境当中提取出来,需要完成一系列的滤波去噪、色彩空间转换等操作。 下面对上述操作进行简单的说明。 滤波:操作的目的是去除图像内的噪声信息,可以使用函数GaussianBlur完成。 灰度:操作将图像有彩色图像处理为灰度图像,以便进行后续的操作。可以使用函数cvtColor完成。 边缘:提取图像边缘,重点提取车牌及其其中字符的边缘,可以使用函数Sobel完成。 二值化:对图像进行阈值处理,将其处理为二值图像,可以使用函数threshold完成。 闭运算:该操作将车牌内分散的各个字符连接在一起,让车牌构成一个整体,可以使用形态学函数,morpohogyEx配合参数cv2.MORPH_CLOSE完成。 开运算:开运算是先腐蚀后膨胀的操作,操作可以去除图像内的噪声,可以使用形态学函数morphologyEx配合参数cv2.MORPH_OPEN完成。 滤波:操作将图像内的噪声去除,可以使用函数medianBlur完成。 轮廓:操作用于查找图像内的所有轮廓,可以使用函数findContours完成。 定位:操作通过筛选图像内所有轮廓得到车牌,通过逐个遍历轮廓,将其中宽高比大于3的轮廓确定为车牌。 三、代码示例 # -*- coding: utf-8 -*- # ====================导入库====================== import cv2 # ================读取原始图像=================== image = cv2.imread("car4.jpg") #读取原始图像 rawImage=image.copy() #复制原始图像 cv2.imshow("original",image) #测试语句,观察原始图像 # ===========滤波处理O1(去噪)===================== image = cv2.GaussianBlur(image, (3, 3), 0) cv2.imshow("GaussianBlur",image) #测试语句,查看滤波结果(去噪) # ========== 灰度变换O2(色彩空间转换BGR-->GRAY)=========== image = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY) cv2.imshow("gray",image) #测试语句,查看灰度图像 # ==============边缘检测O3(Sobel算子、X方向边缘梯度)=============== SobelX = cv2.Sobel(image, cv2.CV_16S, 1, 0) absX = cv2.convertScaleAbs(SobelX) # 映射到[0.255]内 image = absX cv2.imshow("soblex",image) #测试语句,图像边缘 # ===============二值化O4(阈值处理)========================== ret, image = cv2.threshold(image, 0, 255, cv2.THRESH_OTSU) cv2.imshow("imageThreshold",image) #测试语句,查看处理结果 # ===========闭运算O5:先膨胀后腐蚀,车牌各个字符是分散的,让车牌构成一体======= kernelX = cv2.getStructuringElement(cv2.MORPH_RECT, (17, 5)) image = cv2.morphologyEx(image, cv2.MORPH_CLOSE, kernelX) cv2.imshow("imageCLOSE",image) #测试语句,查看处理结果 # =============开运算O6:先腐蚀后膨胀,去除噪声============== kernelY = cv2.getStructuringElement(cv2.MORPH_RECT, (1, 19)) image = cv2.morphologyEx(image, cv2.MORPH_OPEN, kernelY) cv2.imshow("imageOPEN",image) # ================滤波O7:中值滤波,去除噪声======================= image = cv2.medianBlur(image, 15) cv2.imshow("imagemedianBlur",image) #测试语句,查看处理结果 # =================查找轮廓O8================== contours, w1 = cv2.findContours(image, cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE) #测试语句,查看轮廓 image = cv2.drawContours(rawImage.copy(), contours, -1, (0, 0, 255), 3) cv2.imshow('imagecc', image) #============定位车牌O9:逐个遍历轮廓,将宽度>3倍高度的轮廓确定为车牌============ for item in contours: rect = cv2.boundingRect(item) x = rect[0] y = rect[1] weight = rect[2] height = rect[3] if weight > (height * 3): plate = rawImage[y:y + height, x:x + weight] #================显示提取车牌============================ cv2.imshow('plate',plate) # 测试语句:查看提取车牌 cv2.waitKey() cv2.destroyAllWindows() 四、图片文件 图片文件是在百度查找的,估计是二手车市场流出的吧,因为我也不想侵犯他人隐私。 |
|
相关推荐
|
|
只有小组成员才能发言,加入小组>>
【米尔-紫光PG2L100H国产FPGA开发板试用】开箱评测!米尔电子PG2L100H开发板深度体验报告
871 浏览 0 评论
【米尔-Xilinx XC7A100T FPGA开发板试用】+04.SFP之Aurora测试(zmj)
654 浏览 0 评论
【米尔-Xilinx XC7A100T FPGA开发板试用】+03.SFP光口测试(zmj)
590 浏览 1 评论
【米尔-Xilinx XC7A100T FPGA开发板试用】+01.开箱(zmj)
689 浏览 0 评论
【米尔-紫光PG2L100H国产FPGA开发板试用】米尔-紫光PG2L100H国产FPGA开发板开箱评测
685 浏览 0 评论
【米尔-瑞米派兼容树莓派扩展模块-试用体验】基于ROS系统的三麦轮小车自主导航
3599浏览 2评论
【米尔NXP i.MX 93开发板试用评测】5、安装Debian和排除启动故障
612浏览 2评论
【米尔NXP i.MX 93开发板试用评测】2、异构通信环境搭建和源码编译
765浏览 2评论
【米尔-瑞米派兼容树莓派扩展模块-试用体验】Free RTOS应用开发环境部署
1394浏览 1评论
【米尔-芯驰D9开发板- 国产平台试用】- 03- 外设接口测试-U盘、485总线
6804浏览 1评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-4 01:18 , Processed in 0.812847 second(s), Total 68, Slave 51 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号