基于opencv的车牌识别系统
opencv吧
全部回复
仅看楼主
level 1
iHaoº 楼主
首先进行视频的导入,此次经过颜色筛选将蓝色区域识别出来,然后进行闭运算的处理,再将敏感区域绘制其轮廓,并进行外接矩形的绘制,最后进行矩形宽高比的筛选,并将灰度化,闭运算,绘制轮廓,以及车牌定位的最小外接矩形进行窗口展示;然后将每个字符进行最小外接矩形的图像轮廓描绘,最后进行字符的模板匹配,进行识别。
研究手段:
1.视频处理:
Opencv为VideoCapture类提供了cv2.VideoCapture()构造函数,用于打开摄像头并完成摄像头的初始化工作,该构造函数的语法格式为:
捕获对象=cv2.VideoCapture(“摄像头ID号”)
若只有一个摄像头,其ID号可以为0或者-1
若有多个摄像设备,0代表第一个,1为第二个,以此类推,-1表示随机一个
其构造函数也可以读取视频文件,参数改为视频路径即可
返回值=cv2.VideoCapture.isOpen()函数是检查摄像头是否初始化成功,成功为True失败为False
2.图像的基本处理:
2.1读取图像(imread函数)格式为:
r=cv2.imread(filename[,flags]) r为该函数的返回值
filename为读取图像的文件名
flags为读取标记,比如不填或者为0表示改为单通道的灰度图像;1表示调整为3通道的BGR图像,也是默认值
2.2显示图像(imshow函数)格式为:
None=cv2.imshow(windowname,mat) windowname是窗口名称,mat是要显示的的图像
waitkey函数:
r=cv2.waitkey([dalay]) r为返回值;delay表示延时,单位为ms,若为0表示一直显示
destroyAllWindows函数:
cv2.destroyAllWindows()表示当有多个窗口时将全部图像显示出来
2.3彩色图像
常用的RGB色彩空间,分为三个通道,分别是RED,GREEN,BLUE,每个彩色通道的取值范围为[0,255],可以表示所有的彩色图像[0,0,0]纯黑色[255,255,255]纯白色,特别注意的是,在Opencv库中是反过来的BGR
2.4灰度化:
通常,计算机会将灰度化分为256个灰度级,数值区间[0,255],正好可以用一个8位二进制来表示:0000 0000为黑色——1111 1111白色
r,image=cv2.CvtColor(要处理的文件,处理的方式)
CV_RGB2GRAY是RGB到gray,参数 CV_GRAY2RGB是gray到RGB
2.5二值化(阈值处理):
将图像中像素大于阈值的像素变为255,小于阈值的像素变为0
公式:
函数使用格式:
t,rst=cv2.threshold(img,thresh,maxval,type) t为返回值,rst为处理后图像名称,img为处理前图像,thresh、maxval为阈值和最大值(255),type为处理类型,为二值化(cv2.THRESH_BINARY)
3.图像平滑处理
高斯滤波:
高斯滤波是低通滤波的一种,也称为高斯模糊,在高斯滤波中,会将中心点的权重值加大,远离中心点的权重值减小,和正态(高斯)分布相同,所以它的卷积核不再都是1,如将200的像素进行3*3卷积核的高斯滤波结果如下所示:
高斯滤波后为130
函数格式:
dst=cv2.GaussianBlur(src,ksize,sgmaX,sigmaY,borderType)
dst为返回值,src是需要处理的图片,ksize为卷积核大小,为奇数,sgmaX,sigmaY为默认值0,borderType一般不考虑该值,直接采用默认值,固常用格式:dst=cv2.GaussianBlur(src,ksize,0,0)
四、形态学处理
形态学操作包括:开运算闭运算等,而本项目所采用的为闭运算
闭运算:是先进行膨胀,然后在进行腐蚀的功能,它有助于关闭所提取出物体内部的小孔,或者除去小黑点
形态学操作是逐个像素来筛查,每次判定点都是与结构元(核)中心点所对应的点
腐蚀:
能够将图像的边界点消除,使图像沿着边界点向内收缩也可以将小于指定结构体元素的部分进行去除 比如:
二、 研究方法与手段研究方法: 首先进行视频的导入,此次经过颜色筛选将蓝色区域识别出来,然后进行闭运算的处理,再将敏感区域绘制其轮廓,并进行外接矩形的绘制,最后进行矩形宽高比的筛选,并将灰度化,闭运算,绘制轮廓,以及车牌定位的最小外接矩形进行窗口展示;然后将每个字符进行最小外接矩形的图像轮廓描绘,最后进行字符的模板匹配,进行识别。研究手段:1.视频处理:Opencv为VideoCapture类提供了cv2.VideoCapture()构造函数,用于打开摄像头并完成摄像头的初始化工作,该构造函数的语法格式为: 捕获对象=cv2.VideoCapture(“摄像头ID号”) 若只有一个摄像头,其ID号可以为0或者-1 若有多个摄像设备,0代表第一个,1为第二个,以此类推,-1表示随机一个 其构造函数也可以读取视频文件,参数改为视频路径即可 返回值=cv2.VideoCapture.isOpen()函数是检查摄像头是否初始化成功,成功为True失败为False2.图像的基本处理:2.1读取图像(imread函数)格式为: r=cv2.imread(filename[,flags]) r为该函数的返回值 filename为读取图像的文件名 flags为读取标记,比如不填或者为0表示改为单通道的灰度图像;1表示调整为3通道的BGR图像,也是默认值2.2显示图像(imshow函数)格式为: None=cv2.imshow(windowname,mat) windowname是窗口名称,mat是要显示的的图像waitkey函数:r=cv2.waitkey([dalay]) r为返回值;delay表示延时,单位为ms,若为0表示一直显示destroyAllWindows函数:cv2.destroyAllWindows()表示当有多个窗口时将全部图像显示出来2.3彩色图像常用的RGB色彩空间,分为三个通道,分别是RED,GREEN,BLUE,每个彩色通道的取值范围为[0,255],可以表示所有的彩色图像[0,0,0]纯黑色[255,255,255]纯白色,特别注意的是,在Opencv库中是反过来的BGR2.4灰度化: 通常,计算机会将灰度化分为256个灰度级,数值区间[0,255],正好可以用一个8位二进制来表示:0000 0000为黑色——1111 1111白色 r,image=cv2.CvtColor(要处理的文件,处理的方式) CV_RGB2GRAY是RGB到gray,参数 CV_GRAY2RGB是gray到RGB2.5二值化(阈值处理): 将图像中像素大于阈值的像素变为255,小于阈值的像素变为0公式: 函数使用格式: t,rst=cv2.threshold(img,thresh,maxval,type) t为返回值,rst为处理后图像名称,img为处理前图像,thresh、maxval为阈值和最大值(255),type为处理类型,为二值化(cv2.THRESH_BINARY)3.图像平滑处理高斯滤波: 高斯滤波是低通滤波的一种,也称为高斯模糊,在高斯滤波中,会将中心点的权重值加大,远离中心点的权重值减小,和正态(高斯)分布相同,所以它的卷积核不再都是1,如将200的像素进行3*3卷积核的高斯滤波结果如下所示: 高斯滤波后为130 函数格式: dst=cv2.GaussianBlur(src,ksize,sgmaX,sigmaY,borderType)dst为返回值,src是需要处理的图片,ksize为卷积核大小,为奇数,sgmaX,sigmaY为默认值0,borderType一般不考虑该值,直接采用默认值,固常用格式:dst=cv2.GaussianBlur(src,ksize,0,0)四、形态学处理形态学操作包括:开运算闭运算等,而本项目所采用的为闭运算闭运算:是先进行膨胀,然后在进行腐蚀的功能,它有助于关闭所提取出物体内部的小孔,或者除去小黑点形态学操作是逐个像素来筛查,每次判定点都是与结构元(核)中心点所对应的点腐蚀:能够将图像的边界点消除,使图像沿着边界点向内收缩也可以将小于指定结构体元素的部分进行去除 比如: 膨胀:其作用与腐蚀相反,对边界点进行扩张,若两图像距离比较近,可以将其连通在一起 五、描绘轮廓5.1查找图像轮廓:contours,hierarchy=cv2.findContours(image,mode,method)前两个为返回值,image为原图像,参数mode为轮廓检索模式,一般为cv2.RETR_EXTERNAL,只检测外轮廓,参数method是轮廓的近似方法(如何表达轮廓),一般为cv2.CHAIN_APPROX_SIMPLE,压缩垂直水平方向,对角线方向,只保留该方向的终点坐标一个矩形只需要4个点来进行保存信息,左上角的x,y坐标以及矩形xy方向的长度5.2绘制轮廓:o=cv2.drawContours(image,contours,contourIdx,color,thickness)image为原图像,contours需要绘制的轮廓,contourIdx一般为-1代表需要绘制所有轮廓,color用BGR格式表示轮廓颜色,thickness选择线条粗细5.3矩形包围框:函数cv2.boundongRect()能够绘制矩形边界,语法格式为:retval(x,y,w,h)=cv2.boundongRect(array)retval(x,y,w,h)为返回值表示的矩形的左上角顶点的坐标以及宽度高度array为灰度图像或轮廓5.4最小外接矩形:函数cv2.minAreaRect()绘制轮廓最小的外接矩形,语法格式为:retval=cv2.minAreaRect(points)retval为返回的矩形特征信息,结构为(最小外接矩形中心(x,y),(宽度,高度),旋转角度),points为轮廓六、模板匹配函数cv2.mathTemplate()实现模板匹配,语法格式为:result=cv2.matchTemplate(image,templ,method[,mask])image为原始图像,templ为模板图像,其尺寸必须小于等于原始图像,method为匹配方法,选用相关系数匹配法,参数为cv2.TM_CCOEFF,返回值的相关系数越大,匹配程度越好,取值范围为[-1,1]
三、 取得的成果及价值已经实现基于OpenCV的车牌识别系统,可以进行读取,提取,切割,识别功能,其价值也十分可观,可以改善交通管理、提升出入口管理效率、加强公共安全管理等
四、 存在问题及经验存在问题:1. 因为使用的模板匹配,匹配识别程度不高,存在一定误差2. 对于颜色相近,大小相仿且蓝色占比还相同(例如维达、相印抽纸盒)的在同一视频出现无法将其区分3. 程序中存在报错,虽然不影响程序运行,但也需要改进项目经验:1. 现在更新换代比较快,文献及案例上有些返回值以及函数使用格式得到更新,所以经常出现一些意外报错,但是经过一些博主的解答完成相关学习2. 以后再做类似代码项目时,需要先进行基础编程语言的学习,然后进行项目的框架构成,再细细进行相关理论的知识,先整体,再细分,有条不紊
2021年03月13日 08点03分 1
1