摘抄一段目前常用的方法
- 基于颜色的分割方法,这种方法主要利用颜色空间的信息,实现车牌分割,包括彩色边缘算法、颜色距离和相似度算法等
- 基于纹理的分割方法,这种方法主要利用车牌区域水平方向的纹理特征进行分割,包括小波纹理、水平梯度差分纹理等
-
基于边缘检测的分割方法
- 基于数学形态法的分割方法
基于近段时间研究的内容,先尝试下第三种方法。。。
-
具体步骤
- 将车牌图像转换成灰度图
- 对灰度图,利用高斯平滑处理,去除噪声
- 使用Canny行边缘检测
- 对图像进行膨胀、腐蚀,闭运算,开运算的形态学组合变换
- 对图像medianBlur去噪
- 对图像进行轮廓查找,根据车牌的长宽比提取车牌,也可以叠加上颜色,让它更精准
-
读入图片,并转换灰度图
def rec_car(img_name):
img = cv2.imread(img_name)
cv2.imshow('img',img)
img_old = img.copy()
img = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
cv2.imshow('gray', img)
百度查找的图片,如有不适,请及时联系我删除。。。 谢谢!
-
高斯模糊 + 边缘检测
gblur = cv2.GaussianBlur(img,(5,5),0)
cv2.imshow('guass',gblur)
canny = cv2.Canny(gblur,150,380)
cv2.imshow('car-canny', canny)
-
膨胀+腐蚀组合
先膨胀,填充内部,再腐蚀 空出边缘
kernelX = cv2.getStructuringElement(cv2.MORPH_RECT, (25, 1))
kernelY = cv2.getStructuringElement(cv2.MORPH_RECT, (1, 20))
sure = cv2.dilate(canny, kernelX, iterations=2)
cv2.imshow('car-sure1', sure)
opening = cv2.erode(sure, kernelX, iterations=4)
cv2.imshow('car-open1', opening)
sure = cv2.dilate(opening, kernelX, iterations=2)
cv2.imshow('car-sure2', sure)
opening = cv2.erode(sure, kernelY, iterations=1)
cv2.imshow('car-open2', opening)
sure = cv2.dilate(opening, kernelY, iterations=1)
cv2.imshow('car-sure3', sure)
最后再膨胀一次,效果已经相当好了。。。
- 最后再去噪,选取轮廓,标记,就出来了,因为有的图片,最终出来的结果,有些其他的干扰,加上车牌长宽比的范围,过滤
img = cv2.medianBlur(sure,15)
cv2.imshow('car-medina',img)
contours,hier = cv2.findContours(img.copy(), cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)
print('get: ', len(contours))
for c in contours:
x,y,w,h = cv2.boundingRect(c)
# 车牌正常情况下宽高比在2.7-5之间
rat = float(w)/float(h)
print(rat)
if rat > 2 and rat<5.2:
cv2.rectangle(img_old, (x,y),(x+w,y+h),(0,255,0),2)
cv2.imshow('car', img_old)
百度了一些图片,放到文件夹中,试了下,部分还可以,部分效果不行
要针对某一张图片进行手工调整边缘检测、腐蚀、膨胀的参数,才可以有效识别,
不能自动。。。。太衰。。。
只能算是勉强可以,后续还有很多的地方需要继续完善。。。。
调整了个参数,一次出的这几张。。。。。
if __name__ == "__main__":
try:
imgdir = r"./img/car"
for imgfile in os.listdir(imgdir):
img_name = os.path.join(imgdir,imgfile)
if os.path.isdir(img_name):
continue
rec_car(img_name, imgfile)
cv2.waitKey(0)
cv2.destroyAllWindows()
except Exception as ex:
print(ex)
百度查找的图片,如有不适,请及时联系我删除。。。 谢谢!
版权声明:本文为hopena原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。