无意间浏览博客看见原来用opencv可以直接完成模板匹配功能,回想起当年学习MATLAB费了老大劲完成了一个车牌识别。
既然用opencv可以快速完成,一时心血来潮撸了个简单版本的车牌识别
第一步:构建车牌库
这个时候就不用分别建立字符库了,来了个更加精简版本的车牌库
上例图:
第二步:使用模板匹配
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)
运行截图