OpenCV(项目)车牌识别3 -- 模板匹配

2023-05-16

目录

一、基础理论

1、思想

2、大致过程

二、详细过程

1、首先需要模板库

2、得到模板

3、原图限定大小

4、模板匹配

5、匹配所有子文件夹,保存最佳得分(最匹配项)

三、大致过程(细分类,节省时间)

1、汉字匹配

 2、英文字符匹配

3、数字/英文匹配

 4、显示

模板匹配总代码

参考资料


一、基础理论

1、思想

把提取到的每一张字符,和模板库中的所有字符进行对比

2、大致过程

先拿到模板库,把模板和待匹配的图像大小限制一致,匹配每一张子模板图,匹配每张模板图匹配后都会有一个得分,得分最高的最相近。再把每个子文件夹最高得分对比,用index找到最高的那个子文件夹下标,得到模板。

二、详细过程

1、首先需要模板库

模板库下载链接1:(推荐)

https://download.csdn.net/download/great_yzl/21974008

模板库下载链接2:(不推荐)

http://www.zengqiang.club/blog/34

一个大文件夹下包含很多子文件夹:

 

 每一个子文件夹内包含该字符的一系列模板(为了更精确,牺牲了不少时间):

2、得到模板

# 路径
                path = 'Template/' + List[i] + '/' + filename
                # 1、得到模板
                template = cv.imdecode(np.fromfile(path, dtype=np.uint8), 1)    #彩(类似imread)
                gray = cv.cvtColor(template, cv.COLOR_RGB2GRAY)                 #灰
                ret, template = cv.threshold(gray, 0, 255, cv.THRESH_OTSU)      #二值
                cv.imshow('template', template)
                cv.waitKey(0)

3、原图限定大小

# 2、原图限定大小(和模板相似)
                h, w = template.shape
                image = cv.resize(image, (w, h))
                cv.imshow('image_', image)
                cv.waitKey(0)

4、模板匹配

  按照名称列表的方式,遍历模板库的所有子文件夹、子文件夹内的所有子图。

# 3、模板匹配,得到得分(匹配度越高,得分越大)
                result = cv.matchTemplate(image, template, cv.TM_CCOEFF)
                score.append(result[0][0])          #得分(每张模板图)

 

5、匹配所有子文件夹,保存最佳得分(最匹配项)

匹配所有子文件夹的子图: 

# 模板匹配,得到得分(匹配度越高,得分越大)
                result = cv.matchTemplate(image, template, cv.TM_CCOEFF)
                score.append(result[0][0])          #得分(每张模板图)

 每个文件夹的最佳得分:

# 一个文件夹的最高得分(得分越高,匹配度越高)
            best_score.append(max(score))
            # 根据所有文件夹的最佳得分确定下标
            index = best_score.index(max(best_score))+34

三、大致过程(细分类,节省时间)

由于第一个必定是汉字,第二个必定是英文字符,后面的必定是英文字符/数字,我们在那里只需要做相应的判断即可。节约了很多时间。

1、汉字匹配

# (1) 汉字(首个位置只能是汉字(省))(为了节约时间)
    if con == 0:
        # 遍历34——65文件夹(汉字)
        for i in range(34,65):
            # 单个图片的得分
            score = []
            ForderPath = 'Template/' + List[i]
            # 遍历单文件夹(每一个文件匹配)
            for filename in os.listdir(ForderPath):
                # 路径
                path = 'Template/' + List[i] + '/' + filename
                # 1、得到模板
                template = cv.imdecode(np.fromfile(path, dtype=np.uint8), 1)    #彩(类似imread)
                gray = cv.cvtColor(template, cv.COLOR_RGB2GRAY)                 #灰
                ret, template = cv.threshold(gray, 0, 255, cv.THRESH_OTSU)      #二值

                # 2、原图限定大小(和模板相似)
                h, w = template.shape
                image = cv.resize(image, (w, h))
                cv.imshow('image_', image)
                cv.waitKey(0)

                # 3、模板匹配,得到得分(匹配度越高,得分越大)
                result = cv.matchTemplate(image, template, cv.TM_CCOEFF)
                score.append(result[0][0])          #得分(每张模板图)

            # 4、保存子文件夹的最高得分(得分越高,匹配度越高)
            best_score.append(max(score))
            # 5、根据所有文件夹的最佳得分确定下标
            index = best_score.index(max(best_score))+34

 

 2、英文字符匹配

# (2) 字母(第二个位置只能为字母)
    elif con == 1:
        # 遍历10~34文件夹(字母文件夹)
        for i in range(10,34):
            # 单个图片的得分
            score = []
            ForderPath = 'Template/' + List[i]
            # 遍历单文件夹(每一个文件匹配)
            for filename in os.listdir(ForderPath):
                # 路径
                path = 'Template/' + List[i] + '/' + filename
                # 模板
                template = cv.imdecode(np.fromfile(path, dtype=np.uint8), 1)    #彩(类似imread)
                gray = cv.cvtColor(template, cv.COLOR_RGB2GRAY)                 #灰
                ret, template = cv.threshold(gray, 0, 255, cv.THRESH_OTSU)      #二值
                h, w = template.shape
                image = cv.resize(image, (w, h))

                # 模板匹配,得到得分(匹配度越高,得分越大)
                result = cv.matchTemplate(image, template, cv.TM_CCOEFF)
                score.append(result[0][0])          #得分(每张模板图)

            # 一个文件夹的最高得分(得分越高,匹配度越高)
            best_score.append(max(score))
            # 根据所有文件夹的最佳得分确定下标
            index = best_score.index(max(best_score)) + 10

3、数字/英文匹配

# (3) 数字+字母
    else:
        # 遍历0~34文件夹(数字+字母)
        for i in range(34):
            # 单个图片的得分
            score = []
            ForderPath = 'Template/' + List[i]
            # 遍历单文件夹(每一个文件匹配)
            for filename in os.listdir(ForderPath):
                # 路径
                path = 'Template/' + List[i] + '/' + filename
                # 模板
                template = cv.imdecode(np.fromfile(path, dtype=np.uint8), 1)    #彩(类似imread)
                gray = cv.cvtColor(template, cv.COLOR_RGB2GRAY)                 #灰
                ret, template = cv.threshold(gray, 0, 255, cv.THRESH_OTSU)      #二值
                h, w = template.shape
                image = cv.resize(image, (w, h))

                # 模板匹配,得到得分(匹配度越高,得分越大)
                result = cv.matchTemplate(image, template, cv.TM_CCOEFF)
                score.append(result[0][0])          #得分(每张模板图)

            # 一个文件夹的最高得分(得分越高,匹配度越高)
            best_score.append(max(score))
            # 根据所有文件夹的最佳得分确定下标
            index = best_score.index(max(best_score))

 

 4、显示

在切割字符函数的尾部,所有字符切割完、立刻进行模板匹配,同一张车牌所有字符切割完毕后,进行显示。 

# 显示识别结果(图像)
    Show_Result_Image()
# 显示识别结果(图像)
def Show_Result_Image():
    p = image_rect[0], image_rect[1]
    w, h = image_rect[2] , image_rect[3]
    # 框出车牌
    cv.rectangle(img, (p[0],p[1]), (p[0]+w, p[1]+h), (0,0,255), 2)
    # 输出字符(中文)
    result = Text(img, str(final_result), p, (255,0,0), 16)
    cv.imshow('result-%d'%count, result)
    # cv.waitKey(0)

 

模板匹配总代码

# 显示文字(中文)(用的PIL,RGB正常显示,即和opencv的RGB相反)
def Text(image, text, p, color, size):
    # cv2读取图片
    # BGR转RGB:cv2和PIL中颜色的hex码的储存顺序不同
    cv2_image = cv.cvtColor(image, cv.COLOR_RGB2BGR)
    pil_image = Image.fromarray(cv2_image)

    # PIL图片上打印汉字
    draw = ImageDraw.Draw(pil_image)  # 图片上打印
    font = ImageFont.truetype("./simhei.ttf", size, encoding="utf-8")  # 参数1:字体文件路径,参数2:字体大小
    draw.text((p[0]-60, p[1]-20), text, color, font=font)

    # PIL图片转cv2 图片
    cv2_result = cv.cvtColor(np.array(pil_image), cv.COLOR_RGB2BGR)
    # cv2.imshow("图片", cv2_result)      # 汉字窗口标题显示乱码
    # cv.imshow("photo", cv2_result)     # 输出汉字
    return cv2_result


# 显示识别结果(文字)
def Show_Result_Words(index):
    print(List[index])
    final_result.append(List[index])
    print(final_result)


# 显示识别结果(图像)
def Show_Result_Image():
    p = image_rect[0], image_rect[1]
    w, h = image_rect[2] , image_rect[3]
    # 框出车牌
    cv.rectangle(img, (p[0],p[1]), (p[0]+w, p[1]+h), (0,0,255), 2)
    # 输出字符(中文)
    result = Text(img, str(final_result), p, (255,0,0), 16)
    cv.imshow('result-%d'%count, result)
    # cv.waitKey(0)

# 三、模板匹配
# 原图和模板进行对比,越匹配,得分越大
def Template_Match(image):
    # 单文件夹内的最佳得分
    best_score = []
    # 遍历所有文件夹(每一个文件夹匹配)
    # (1) 汉字(首个位置只能是汉字(省))(为了节约时间)
    if con == 0:
        # 遍历34——65文件夹(汉字)
        for i in range(34,65):
            # 单个图片的得分
            score = []
            ForderPath = 'Template/' + List[i]
            # 遍历单文件夹(每一个文件匹配)
            for filename in os.listdir(ForderPath):
                # 路径
                path = 'Template/' + List[i] + '/' + filename
                # 1、得到模板
                template = cv.imdecode(np.fromfile(path, dtype=np.uint8), 1)    #彩(类似imread)
                gray = cv.cvtColor(template, cv.COLOR_RGB2GRAY)                 #灰
                ret, template = cv.threshold(gray, 0, 255, cv.THRESH_OTSU)      #二值

                # 2、原图限定大小(和模板相似)
                h, w = template.shape
                image = cv.resize(image, (w, h))

                # 3、模板匹配,得到得分(匹配度越高,得分越大)
                result = cv.matchTemplate(image, template, cv.TM_CCOEFF)
                score.append(result[0][0])          #得分(每张模板图)

            # 4、保存子文件夹的最高得分(得分越高,匹配度越高)
            best_score.append(max(score))
            # 5、根据所有文件夹的最佳得分确定下标
            index = best_score.index(max(best_score))+34


    # (2) 字母(第二个位置只能为字母)
    elif con == 1:
        # 遍历10~34文件夹(字母文件夹)
        for i in range(10,34):
            # 单个图片的得分
            score = []
            ForderPath = 'Template/' + List[i]
            # 遍历单文件夹(每一个文件匹配)
            for filename in os.listdir(ForderPath):
                # 路径
                path = 'Template/' + List[i] + '/' + filename
                # 模板
                template = cv.imdecode(np.fromfile(path, dtype=np.uint8), 1)    #彩(类似imread)
                gray = cv.cvtColor(template, cv.COLOR_RGB2GRAY)                 #灰
                ret, template = cv.threshold(gray, 0, 255, cv.THRESH_OTSU)      #二值
                h, w = template.shape
                image = cv.resize(image, (w, h))

                # 模板匹配,得到得分(匹配度越高,得分越大)
                result = cv.matchTemplate(image, template, cv.TM_CCOEFF)
                score.append(result[0][0])          #得分(每张模板图)

            # 一个文件夹的最高得分(得分越高,匹配度越高)
            best_score.append(max(score))
            # 根据所有文件夹的最佳得分确定下标
            index = best_score.index(max(best_score)) + 10


    # (3) 数字+字母
    else:
        # 遍历0~34文件夹(数字+字母)
        for i in range(34):
            # 单个图片的得分
            score = []
            ForderPath = 'Template/' + List[i]
            # 遍历单文件夹(每一个文件匹配)
            for filename in os.listdir(ForderPath):
                # 路径
                path = 'Template/' + List[i] + '/' + filename
                # 模板
                template = cv.imdecode(np.fromfile(path, dtype=np.uint8), 1)    #彩(类似imread)
                gray = cv.cvtColor(template, cv.COLOR_RGB2GRAY)                 #灰
                ret, template = cv.threshold(gray, 0, 255, cv.THRESH_OTSU)      #二值
                h, w = template.shape
                image = cv.resize(image, (w, h))

                # 模板匹配,得到得分(匹配度越高,得分越大)
                result = cv.matchTemplate(image, template, cv.TM_CCOEFF)
                score.append(result[0][0])          #得分(每张模板图)

            # 一个文件夹的最高得分(得分越高,匹配度越高)
            best_score.append(max(score))
            # 根据所有文件夹的最佳得分确定下标
            index = best_score.index(max(best_score))

    # 显示结果(文字)(每识别一个显示一次)
    Show_Result_Words(index)

        总的来讲,为了追求较高的精度,匹配时间较长, 一张车牌约20秒。这里的模板匹配不算非常的精确,并且耗时严重,已经逐渐被淘汰了,这里只是作为学习用途,没有太高的实际应用价值。(后期进军深度学习/机器学习,可能会对这些进行优化)。有什么好的建议大家可以提出来,共同进步,谢谢~

参考资料

https://www.bilibili.com/video/BV1yg4y187kU?p=3

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

OpenCV(项目)车牌识别3 -- 模板匹配 的相关文章

  • 如何在 Ubuntu 16.04 上安装适用于 Python 2.7 的 openCV 2.4.13?

    我尝试了很多在线帖子来安装 opencv 但它们不适用于 Ubuntu 16 04 有人可以给我安装 openCV 2 4 13 的步骤吗 我不久前制作了一个脚本 用于安装最新版本的 OpenCV 截至本答案的最后一次更新为 4 2 这是它
  • 变形:Opencv 使用 Visual Studio 将图像显示到曲面屏幕

    我正在尝试使用 opencv API 来扭曲图像 以便将其显示到曲面屏幕上 我已经浏览了opencv中提供的翘曲apihere http docs opencv org 2 4 modules stitching doc warpers h
  • OpenCV Python 删除图像中的某些对象

    我正在使用带有 opencv 和 numpy 的 python 来检测天文中的星星 例如这个1 https i stack imgur com AKwEJ jpg图片 使用模板匹配 我可以用阈值检测星星 单击 2 2 https i sta
  • 使用 K 均值聚类 OpenCV 进行交通标志分割

    I used K Means Clustering to perform segmentation on this traffic sign as shown below 这些是我的代码 读取图像并模糊 img cv imread 000
  • 使用 Azure 机器学习检测图像中的符号

    4年前我发帖这个问题 https stackoverflow com q 6999920 411094不幸的是 得到的一些答案超出了我的技能水平 我刚刚参加了一次构建巡演会议 他们在会上谈论了机器学习 这让我想到了使用 ML 来解决我的问题
  • 附加信息:OpenCV:使用 c# 的不同大小的对象

    目前 我的 EmguCV c 代码面临问题 我试图从数据库中识别我的图像 但它不起作用 一旦检测到我的脸 它就会崩溃 然后会出现此错误 附加信息 OpenCV 不同大小的对象 我尝试寻找这个错误 但我一无所知 这是我的代码 Action f
  • 检测骰子的上侧

    是否可以检测骰子的上面 虽然从顶部看这将是一项简单的任务 但从许多角度来看 可以看到多个侧面 Here is an example of a dice feel free to take your own pictures 您通常想知道自己
  • OpenCV非旋转图像拼接

    我正在 OpenCV 中进行图像拼接 从不同位置拍摄平面场景的照片并尝试构图全景图 我修改了缝合示例以满足我的需要 openCV 拼接管道的问题是 它假设相机纯粹旋转 但对我来说情况并非如此 当拍摄的照片与场景完全正交时 没有相机旋转 只是
  • 跟踪白色背景中的白球(Python/OpenCV)

    我在 Python 3 中使用 OpenCV 来检测白场上的白 黑球 并给出它的精确 x y 半径 和颜色 我使用函数 cv2 Canny 和 cv2 findContours 来找到它 但问题是 cv2 Canny 并不总是检测到圆的完整
  • OpenCV:使用 StereoCamera 系统对颜色标记进行 3D 姿态估计

    我有一个立体摄像系统并使用两者正确校准它 cv calibrateCamera and cv stereoCalibrate My reprojection error似乎没问题 凸轮0 0 401427 凸轮1 0 388200 立体声
  • `opencv.android.JavaCameraView` 和 `opencv.android.NativeCameraView` 有什么区别

    正如主题中所述 有什么区别opencv android JavaCameraView and opencv android NativeCameraView 与其他主要优点相比 有哪些优点可以提供更多选择 来自OpenCV 文档 http
  • OpenCV 完美识别物体

    我有一个应用程序 我想一次跟踪 2 个在图片中相当小的对象 该应用程序应该在 Android 和 iPhone 上运行 因此算法应该是高效的 对于我的客户来说 如果我们提供一些模式以及附加到要跟踪的对象的软件 以获得易于识别的目标 那就完全
  • ValueError:当数组不是序列时设置带有序列的数组元素

    您好 此代码旨在存储使用 open cv 绘制的矩形的坐标 并将结果编译为单个图像 import numpy as np import cv2 im cv2 imread 1 jpg im3 im copy gray cv2 cvtColo
  • Haar训练时正样本和负样本使用多少张图片?

    我已经阅读了大量有关 Haar 训练的内容 但我不清楚应该为正样本集和负样本集使用多少图像 我看到建议使用很多图像 有些人推荐数千张 我也不清楚正负样本图像的数量是否应该相同 这是关于 Haar 训练的最佳教程 你试过这个吗 http no
  • 使用 cv2 在 python 中创建多通道零垫

    我想用 cv2 opencv 包装器在 python 中创建一个多通道 mat 对象 我在网上找到了一些例子 其中 c Mat zeros 被 numpy zeros 替换 这看起来不错 但似乎没有多通道类型适合 看代码 import cv
  • opencv如何使用鼠标事件不规则地选择图像区域? c/c++ [关闭]

    Closed 这个问题需要细节或清晰度 help closed questions 目前不接受答案 最近在学习opencv 有没有办法使用鼠标事件选择图像区域 我已经尝试过三角形的了 如果我想选择特定区域而不是三角形怎么办 谢谢你 我对此进
  • 在 Python 中使用音频流 RTMP 通过管道和 OpenCV 到 FFmpeg

    我正在尝试使用音频流式传输 FFmpeg 我将在下面展示我的代码 导入模块 import subprocess as sp 创建变量 rtmpUrl rtmp a rtmp youtube com live2 key camera path
  • 如何平滑循环列向量

    这是一个 OpenCV2 问题 我有一个矩阵代表closed空间曲线 cv Mat
  • 使用 openCV 对图像中的子图像进行通用检测

    免责声明 我是计算机视觉菜鸟 我看过很多关于如何在较大图像中查找特定子图像的堆栈溢出帖子 我的用例有点不同 因为我不希望它是具体的 而且我不确定如何做到这一点 如果可能的话 但我感觉应该如此 我有大量图像数据集 有时 其中一些图像是数据集的
  • 基于 OpenCV 边缘的物体检测 C++

    我有一个应用程序 我必须检测场景中某些项目的存在 这些项目可以旋转并稍微缩放 更大或更小 我尝试过使用关键点检测器 但它们不够快且不够准确 因此 我决定首先使用 Canny 或更快的边缘检测算法 检测模板和搜索区域中的边缘 然后匹配边缘以查

随机推荐

  • 路由器开发————概念理解

    区别 xff1a 静态ip 可以直接使用Internet上网的IP xff08 相当于公网IP xff09 pppoe 从运营商那里动态获取的静态IP的过程就是PPPOE 运营商为了提高他手上拥有的静态IP的利用率 xff0c 而做出的动态
  • 干了三年java外包,我转AI了....

    谈及到程序员外包这件事 xff0c 我想我是比较有发言权的一个 xff0c 即使我现在已经从一个外包公司的JAVA开发转行做人工智能算法 我是2018年毕业的 xff0c 一毕业找的第一份工作就是一家外包公司 xff0c 主要做的是承接甲方
  • 人工智能的算法有哪些?AI常用算法

    人工智能 xff08 AI xff09 是一个非常广泛的领域 xff0c 其中包含许多不同的算法和技术 以下是一些常见的人工智能算法 xff1a 人工智能的算法有哪些 xff1f 机器学习 xff08 Machine Learning xf
  • 卡尔曼滤波五个公式各个参数的意义

    卡尔曼滤波五个公式各个参数的意义 wccsu1994 2018 11 30 10 49 33 45928 收藏 218 分类专栏 xff1a 卡尔曼滤波 版权 系统的状态方程为 xff1a 这个状态方程是根据上一时刻的状态和控制变量来推测此
  • FutureTask 示例

    1 简单示例 2 泡茶 1 简单示例 创建 FutureTask FutureTask lt Integer gt futureTask 61 new FutureTask lt gt gt 1 43 2 创建并启动线程 Thread t1
  • Centos6.5下进行PHP版本升级

    统计插件 WP Statistics 要求PHP5 4以上 xff0c 可本机PHP为5 3 3 xff0c 无奈只有对服务器PHP进行升级 xff0c 遂写下本文 Step1 xff1a 查看安装服务器当前安装版本 php V Step2
  • 一段日子的结束, 也是一段日子的开始

    一个朋友说的 xff0c 一段日子的结束 xff0c 也是另一段日子的开始 也正是我现在的状态 xff0c 我结束了一段往事 xff0c 也因此开始了一段日子 xff0c 曾经的曾经已离我远去 昨天和好朋友聊天到很晚 xff0c 谈了很多
  • 岁月静好

    不是说马年会马上转运的 xff0c 是不是蛇年的时候前半年太幸福了 xff0c 用了太多的好人品 xff0c 各种奖学金 xff0c 各种申请中标 xff0c 各种荣誉 xff0c 然后我要还了 小猴子说我开始会依赖人了 xff0c 哈哈
  • STM32 中重定向printf 和 scanf

    uart c 如果使用 pragma import use no semihosting 则在MDK中不勾选use Microlib 当前代码直接重定向没使用 pragma import use no semihosting 故需要选择us
  • Ubuntu环境下Pixhawk原生固件PX4的编译

    Ubuntu下Pixhawk原生固件PX4的编译这个问题困扰了两天时间 xff0c 可能是博主脑力不够 xff0c 主要是环境搭建不起来 xff0c 主要原因应该是路径的原因 xff0c 最后在大师傅的帮助下还好成功将路径搭建好 xff0c
  • 远程连接虚拟机的Network error: Connection timed out问题

    MobaXterm远程连接虚拟机的Network error Connection timed out问题 我使用的是MobaXterm远程连接我使用VMware创建的虚拟机 更新一下 xff1a 如果出现这种问题 xff0c 极大可能是服
  • springboot项目接入天猫精灵

    springboot项目接入天猫精灵 最近工作需要使用到天猫精灵的语音功能 xff0c 大体是通过呼叫对应的 调用词 实现携带参数 xff0c 然后调用我项目中的接口 xff0c 以实现对应的业务 所以在此简单的记录下使用过程 实际上 xf
  • Lesson 9.2&9.3&9.4 黑箱:不可解释的深层神经网络&探索多层神经网络:层vsh(z)

    二 黑箱 xff1a 深层神经网络的不可解释性 首先从结构上来看 xff0c 多层神经网络比单层神经网络多出了 中间层 中间层常常被称为隐藏层 xff08 hidden layer xff09 xff0c 理论上来说可以有无限层 xff0c
  • UnicodeEncodeError: 'gbk' codec can't encode character ...

    使用Python写文件的时候 xff0c 或者将网络数据流写入到本地文件的时候 xff0c 大部分情况下会遇到 xff1a UnicodeEncodeError 39 gbk 39 codec can 39 t encode charact
  • 一文简单了解并构建DockerFile

    GreatSQL社区原创内容未经授权不得随意使用 xff0c 转载请联系小编并注明来源 GreatSQL是MySQL的国产分支版本 xff0c 使用上与MySQL一致 作者 xff1a 蟹黄瓜子文章来源 xff1a GreatSQL社区投稿
  • 头文件中定义和声明的问题

    头文件中定义和声明的问题 1 头文件中不可以放变量的定义 xff01 一般头文件中只是放变量的声明 xff0c 因为头文件要被其他文件包含 include xff0c 如果把定义放在头文件的话 xff0c 就不能避免多次定义变量 C 43
  • Apache中更改PHP版本型号

    如何对服务器PHP版本进行升级 xff0c 详看我另外一篇博文 xff0c 这篇文章我们将讲述如何在Apache中更改PHP版本型号 Step1 xff1a 查看Apache用的PHP什么版本 新建一个文档 xff0c 命名为info ph
  • 简述AGV通信接口标准-VDA5050

    引言 德国汽车工业协会 德语 xff1a Verband der Automobilindustrie e V 简称VDA xff0c 通过 其 34 VDA 5050 34 接口 xff0c 早在2019年起 xff0c 不同制造商的车辆
  • C语言结束输入(两种方法)

    方法1 xff1a 输入数据 while getchar 61 39 n 39 scanf 34 d 34 amp Data data i 43 43 61 Data 方法2 xff1a for i 61 0 i lt 100 amp am
  • OpenCV(项目)车牌识别3 -- 模板匹配

    目录 一 基础理论 1 思想 2 大致过程 二 详细过程 1 首先需要模板库 2 得到模板 3 原图限定大小 4 模板匹配 5 匹配所有子文件夹 xff0c 保存最佳得分 xff08 最匹配项 xff09 三 大致过程 xff08 细分类