利用模板匹配的思路进行车牌的智能识别(三)

序言

上篇文章
介绍了如何通过CNN来识别车牌的字母和数字,接下来我们尝试通过模板匹配的方式进行识别。

思路

  • 遍历读取所有的字符图
  • 匹配所有的模板

实现

  • 批量读取所有图片
for match_ite in os.listdir(match_path):
  • 模板的文件夹如下
    在这里插入图片描述
  • 双层for循环读取
for (i, template) in enumerate(os.listdir(template_path)):
            # 0 , 1, 2, 3
            for (index,template_img) in enumerate(os.listdir(template_path + template)):
                # 1, 2, 3, 4张图片

  • 每个进行匹配, 并获取最大的置信度
template_img_arr = cv.imread(template_path + template + "/" + template_img)
                result = cv.matchTemplate(template_img_arr, match_img, cv.TM_CCOEFF_NORMED)
                min_val,max_val,min_loc,max_loc = cv.minMaxLoc(result)
                # 取每个文件夹最大的置信度
                if max_val > max_confidence:
                    max_confidence = max_val
                    num_list[match_ite] = i
  • 拼接字符
 car_number = ''
    for i in confidence_list:
        car_number += template_obj[i]
    return car_number

实验

template_find()

在这里插入图片描述

  • 看到识别的效果不是很准确,可能是模板和截取的字符串位置偏差太多,这个有待优化

完整代码:

import cv2 as cv
import os
def template_find():
    template_obj = ['0','1','2','3','4','5','6','7','8','9',
            'A','B','C','D','E','F','G','H','J','K','L','M','N','P','Q','R','S','T','U','V','W','X','Y','Z',
            '京','闽','粤','苏','沪','浙']
    # 模板匹配
    # 设置 模板
    #遍历所有的模板
    template_path = './tf_car_license_dataset/train_images/training-set/'
    match_path = './split/'
    confidence_list = []
    for match_ite in os.listdir(match_path):
        match_img = cv.imread(match_path + match_ite)
        match_img = cv.resize(match_img, (32, 40))
        num_list = {match_ite: -1}
        max_confidence = 0
        for (i, template) in enumerate(os.listdir(template_path)):
            # 0 , 1, 2, 3
            for (index,template_img) in enumerate(os.listdir(template_path + template)):
                # 1, 2, 3, 4张图片
                # if index >= 15:
                #     break
                # print(template + template_img)
                template_img_arr = cv.imread(template_path + template + "/" + template_img)
                result = cv.matchTemplate(template_img_arr, match_img, cv.TM_CCOEFF_NORMED)
                min_val,max_val,min_loc,max_loc = cv.minMaxLoc(result)
                # 取每个文件夹最大的置信度
                if max_val > max_confidence:
                    max_confidence = max_val
                    num_list[match_ite] = i
        confidence_list.append(num_list[match_ite])
    print(confidence_list)
    car_number = ''
    for i in confidence_list:
        car_number += template_obj[i]
    return car_number
  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

东哥爱编程

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值