树莓派_Opencv学习笔记23:模版样本匹配

news2024/11/16 17:50:06

  今日继续学习树莓派4B 4G:(Raspberry Pi,简称RPi或RasPi)

 本人所用树莓派4B 装载的系统与版本如下:

 版本可用命令 (lsb_release -a) 查询:

 Opencv 版本是4.5.1:

 Python 版本3.7.3:

 

今日学习Opencv样本模板匹配.....这次的程序比较简单,就不刻意放在树莓派上再验证了...

文章提供测试代码讲解,整体代码贴出、测试效果图

 

目录

代码贴出:

实验结果:

有关模板匹配的疑问:

模板大小变化会不会影响匹配

模板匹配都要在灰度图下进行吗

网上学习网址贴出:


 

代码贴出:

这个代码需要俩张图片,一张作为模板,一张作为寻找是否含有模板的母版

这里我是使用扑克牌图片 与 其一部分花纹图片 进行实验

这个代码会框出所有匹配到的部分:

如果你选择了其他图片与模板,出现了漏框现象:

可以试着降低代码第20行设置的阈值(我最初设置的0.8,发现其余匹配到的都框出了,就差最中间的,于是降低到0.7就都框出了)

import cv2
import numpy as np

# 读取主图像和模版图像
image = cv2.imread('main_image.jpg', 0)  # 0 表示以灰度模式读取
template = cv2.imread('template.jpg', 0)

# 如果图像没有正确加载,则退出
if image is None or template is None:
    print("Error loading images!")
    exit()

# 获取模版的高度和宽度
w, h = template.shape[::-1]

# 执行模版匹配
res = cv2.matchTemplate(image, template, cv2.TM_CCOEFF_NORMED)

# 设置阈值
threshold = 0.7

# 初始化一个空列表来存储匹配到的位置
loc = []

# 找到所有匹配项
for y in range(res.shape[0] - h + 1):
    for x in range(res.shape[1] - w + 1):
        if res[y, x] >= threshold:
            loc.append((x, y))

        # 在原图上标记所有匹配到的位置
for pt in loc:
    cv2.rectangle(image, pt, (pt[0] + w, pt[1] + h), (0, 255, 0), 1)

# 显示结果
cv2.imshow('Detected', image)
cv2.waitKey(0)
cv2.destroyAllWindows()

 

实验结果:

发现框出的线,有些地方粗,有些细,说明匹配是以像素点为单位 位移过去的,相差不多的位置多次被视作匹配成功,因此需要设定阈值,以免框出过多匹配度不高的部分

有关模板匹配的疑问:

模板大小变化会不会影响匹配

模板大小的变化确实会影响匹配结果。在模版匹配中,模板的尺寸(即宽度和高度)是固定的,它定义了要在原图像中搜索的特定区域的大小和形状。

如果模板的大小发生变化,那么:

  1. 匹配区域:原图像中能够被匹配到的区域将仅限于那些与当前模板尺寸相匹配的区域。如果模板变大了,那么能够匹配到的区域就会减少,因为更大的模板需要更多的相似像素来匹配。相反,如果模板变小了,理论上能够匹配到的区域就会增多,但可能会匹配到一些不太相似的区域,因为小模板对细节的要求较低。

  2. 匹配精度:模板的大小还会影响匹配的精度。较大的模板通常能够捕获更多的图像细节,从而可能提高匹配的准确性,尤其是在图像中目标物体较大且特征明显时。然而,如果目标物体较小或图像中存在大量噪声和干扰,较大的模板可能会降低匹配的准确性,因为它会包含更多的不相关信息。

  3. 计算时间:模板的大小还会影响匹配算法的计算时间。较大的模板意味着需要比较更多的像素,从而导致计算时间增加。

  4. 匹配策略:在某些情况下,你可以使用多尺度模版匹配(也称为金字塔匹配)来应对模板大小变化的问题。这种方法会在不同尺度上(即不同大小)的原图像上执行模版匹配,从而找到最佳匹配位置和尺度。

因此,在选择模板大小时,你需要根据具体的应用场景和目标物体的特性来做出合理的决策。如果你不确定模板的最佳大小,可以尝试使用不同大小的模板进行匹配,并观察匹配结果和计算时间的变化,从而选择最合适的模板大小。

 

模板匹配都要在灰度图下进行吗

灰度图下进行模板匹配的优势

  1. 简化计算:灰度图像去除了颜色信息,只保留了亮度信息,因此处理的数据量大大减少,使得模板匹配的计算过程更加快速和高效。
  2. 减少干扰:在某些情况下,颜色信息可能会成为干扰因素,影响匹配的准确性。使用灰度图像可以消除这种干扰,使匹配结果更加可靠。

彩色图下进行模板匹配的情况

  1. 颜色信息重要:如果匹配目标依赖于特定的颜色信息,那么在彩色图下进行模板匹配将更为合适。彩色图像能够提供更多维度的信息,有助于提高匹配的准确率。
  2. 特定应用场景:在某些特定应用场景中,如医学图像处理、遥感图像处理等,可能需要保留颜色信息以进行更精确的分析和判断。

综合考虑

因此,是否选择在灰度图下进行模板匹配,需要根据具体的应用场景和需求来决定。如果匹配目标主要依赖于形状、纹理等灰度特征,且颜色信息对匹配结果影响不大,那么在灰度图下进行模板匹配将是一个不错的选择。反之,如果颜色信息对匹配结果至关重要,或者需要在彩色图像中保留更多维度的信息,那么可以考虑在彩色图下进行模板匹配。

总的来说,模板匹配的选择应基于实际应用的需求和图像数据的特性来进行综合考虑。

网上学习网址贴出:

1-模板匹配方法_哔哩哔哩_bilibili

 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1956342.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

香烟商品销售网站

1 香烟商品销售网站概述 1.1 课题简介 1.2 设计目的 1.3 系统开发所采用的技术 1.4 系统功能模块 2 数据库设计 2.1 建立的数据库名称 2.2 所使用的表 3 香烟商品销售网站设计与实现 1. 注册登录: 2. 分页查询: 3. 分页条件(精确、…

速卖通卖家如何利用自养号测评,让店铺曝光量飙升?

在速卖通这个竞争激烈的跨境电商平台上,店铺曝光率是决定销售成败的关键因素之一。为了在众多商家中脱颖而出,增加速卖通店铺曝光显得尤为重要。速卖通怎么增加店铺曝光? 速卖通怎么增加店铺曝光? 1、优化产品列表 速卖通的产品列表是买家…

数据库实验:连接查询

一、实验目的: 1、掌握使用两种写法完成连接查询:叉积连接语法和内连接语法。 2、掌握使用外连接语法完成查询。 3、掌握使用派生表完成下列查询。 二、实验内容: 1. 使用连接实现查询,查询订单号为‘000005’的订单订购的玩具…

windows 安装docker桌面版

下载 下载两个: git桌面版 docker desktop 启动docker 执行安装文件,启动 更新wsl2 假如报错,会提示失败原因。 win10会提示跳转到: https://learn.microsoft.com/zh-cn/windows/wsl/install-manual#step-4—download-the-l…

CANoe编程实例--TCP/IP通信

1、简介 本实例将使用目前常用的开发工具C#来开发服务器端,以CANoe端作为客户端。服务器端和客户端,通过TCP/IP连接,实现数据交换。 首先在服务器端建立一个监听Socket,自动创建一个监听线程,随时监听是否有客户端的连…

使用 Visual Studio 2022 自带的 cl.exe 编译 tensorRT自带测试样例 sampleOnnxMNIST

1. 新建任意文件夹,将 D:\install\tensorRT\TensorRT-8.6.1.6\samples\sampleOnnxMNIST 下面的 sampleOnnxMNIST.cpp 文件复制进来,同时 D:\install\tensorRT\TensorRT-8.6.1.6\samples\sampleOnnxMNIST 下面的 sample_onnx_mnist.vcxproj 中的内容&…

WEBKIT 通过JavaScript 调用本地,硬件未来之窗OS硬件APP

以酒店为例我们需要调用shen份证读取,采集人脸,门锁写房卡,如何通过浏览器调用 1.通过本地http服务 2.通过webkit模式 这里说政务单位模式的集成 由于篇幅问题,怎么集成webkit就不说了 一、webkkit加载交互本地代码 browser.…

【Kettle实现神通(数据库)MPP增量、全量数据ETL,同步任务Linux运行(通用)】

1、背景介绍 具体Kettle操作步骤不做过多介绍,主要技术方案说明,Kettle8.2版本放在底部链接提取,本次采用Kettle实现源端:神通数据通用库、目标端:神通MPP增量数据同步,并在服务器端运行Job。 2、windows…

Materials Today|用于婴儿监护的柔性电子设备 (柔性健康监测/柔性传感/可穿戴电子/电子皮肤/柔性电子)

西安交通大学方云生(Yunsheng Fang)、徐峰(Feng Xu)和西安交通大学第一附属医院林婷(Ting Lin)团队,在期刊《Materials Today》上发布了一篇题为“Soft electronics for advanced infant monito…

关于@JsonSerialize序列化与@JsonDeserialize反序列化注解的使用(密码加密与解密举例)

注:另一种方式参考 关于TableField中TypeHandler属性,自定义的类型处理器的使用(密码加密与解密举例)http://t.csdnimg.cn/NZy4G 1.简介 1.1 序列化与反序列化 学习注解之前,我们可以先了解一下什么是序列化与反序列…

JAVA里的配置文件(Properties)详解

package Properties;import java.util.Map; import java.util.Properties; import java.util.Set;public class demo1 {public static void main(String[] args) {/*Properties作为Map集合的操作*///1.创建集合的对象Properties pnew Properties();//2.添加数据//细节&#xff…

谷粒商城实战笔记-79-商品服务-API-平台属性-销售属性维护

文章目录 一,列表接口开发1,新建常量类2,路径参数识别规格参数和销售属性 二,其他接口三,编码经验-使用常量类为什么要用常量类?示例 这一节的主要内容是: 销售属性列表查询接口的开发将代码中的…

C++ 沙漏图案(Hour-glass Pattern)

给定正整数 n,以沙漏形式打印数字模式。示例: 输入:rows_no 7 输出: 1 2 3 4 5 6 7 2 3 4 5 6 7 3 4 5 6 7 4 5 6 7 5 6 7 6 7 7 6 7 5 6 7 4 5 6 7 3 4 5 6 7 2 3 4 5 6 7 1 2 3 4 5 6…

等保2.0测评 — 容器测评对象选取

之前有小伙伴提问到,关于容器到底要测评哪些内容,也就是测评对象的选取。 首先要区分的是容器与容器集群这两个概念。容器集群概念可参考该篇文章。 不使用容器扩展要求情况 当仅使用容器技术时,采用安全通用要求,无需使用容器…

AFSim仿真系统-架构概览

引言 本文档从最终用户的角度描述了AFSIM架构,旨在帮助最终用户深入了解AFSIM的操作概念。 核心架构 AFSIM基于面向对象的C架构,提供了一种可扩展和模块化的架构,使得许多附加功能能够轻松集成。AFSIM允许新的组件模型(如传感器、…

2019数字经济公测大赛-VMware逃逸

文章目录 环境搭建漏洞点exp 环境搭建 ubuntu :18.04.01vmware: VMware-Workstation-Full-15.5.0-14665864.x86_64.bundle 这里环境搭不成功。。patch过后就报错,不知道咋搞 发现可能是IDA加载后的patch似乎不行对原来的patch可能有影响,重新下了patch&…

LiteFlow条件组件的设计组件标签|组件参数,EL与或非表达式正反解析,元数据管理

个人博客:无奈何杨(wnhyang) 个人语雀:wnhyang 共享语雀:在线知识共享 Github:wnhyang - Overview 参考 https://juejin.cn/post/7005869798483558431 🍉组件参数 | LiteFlow &#x1f34…

黑龙江等保测评如何做到既全面又高效?

在黑龙江省进行等保测评,必须在全面和高效之间寻求一个平衡点,以保证网络的安全性和可靠性。黑龙江等保测评怎样才能在二者之间发现黄金交汇点?下面,我们来揭开谜底。 精准定位,明确测评范围 首先,一个综…

LLaMA Factory添加新模型template的实战解析

大家好,我是herosunly。985院校硕士毕业,现担任算法研究员一职,热衷于大模型算法的研究与应用。曾担任百度千帆大模型比赛、BPAA算法大赛评委,编写微软OpenAI考试认证指导手册。曾获得阿里云天池比赛第一名,CCF比赛第二名,科大讯飞比赛第三名。授权多项发明专利。对机器学…

OpenCV facedetect 人脸检测官方示例项目配置

运行程序。该程序会自动打开摄像头,识别并定位摄像头前的人脸以及眼睛部位。 输入q或者Q,退出程序。 或进行文本中所包含的图片路径 或 单个图片进行检测,自行修改代码即可 配置环境项目,debug 解决error C4996: ‘fopen’: This…