无意间浏览博客看见原来用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)