opencv模板匹配完成车牌识别(简易版)

647 阅读1分钟

无意间浏览博客看见原来用opencv可以直接完成模板匹配功能,回想起当年学习MATLAB费了老大劲完成了一个车牌识别。
既然用opencv可以快速完成,一时心血来潮撸了个简单版本的车牌识别

第一步:构建车牌库

这个时候就不用分别建立字符库了,来了个更加精简版本的车牌库
上例图:

image.png

第二步:使用模板匹配

2.1 读取车牌库
2.2 构建空LIST分别对应的是“匹配度”和车牌号
2.3 在for循环中遍历车牌库内容
2.4 进行Image2opencv转换
2.5 使用cv2.matchTemplate完成模板匹配
2.6 计算最大/最小匹配度和的均值并添家到空LIST中
2.7 将车牌号名称添加到对应的LIST中去
2.8 计算匹配度的最大值
2.9 找到匹配最大值的位置
2.10 最大值匹配度对应的车牌号名称\

def TemplateMatching(Img):
    oldImgPath = 'C:/Users/kiven/Desktop/CarID/carid/'
    oldImgLine = os.listdir(oldImgPath)
    ListVal = []
    ListimgName = []
    for OldimgName in oldImgLine:
        old_images = Image.open(oldImgPath + OldimgName)
        OldImages = cv2.cvtColor(numpy.asarray(old_images), cv2.COLOR_RGB2BGR)
        method = eval('cv2.TM_CCORR_NORMED')  # eval 语句用来计算存储在字符串中的有效 Python 表达式
        # 模板匹配
        NewImage = cv2.cvtColor(numpy.asarray(Img), cv2.COLOR_RGB2BGR)
        res = cv2.matchTemplate(NewImage, OldImages, method)
        # 寻找最值
        min_val, max_val, min_loc, max_loc = cv2.minMaxLoc(res)
        meanVal = (min_val+max_val)/2
        ListVal.append(meanVal)
        ListimgName.append(OldimgName)
    MaxValue = max(ListVal)
    whereMaxValue = ListVal.index(MaxValue)
    CarId = ListimgName[whereMaxValue]
    print(CarId)

第三步:使用模板匹配完成车牌识别

NewImages = Image.open('1.jpg')
TemplateMatching(NewImages)

运行截图

image.png

image.png