python opencv -模板匹配
python opencv -模板匹配
模板匹配就是,我们现有一个模板和一个图片,然后,在这个图片中寻找和模板近似的部分。
在opencv 中主要通过cv2.matchTemplate这个函数去实现。
下面我们先看一下,模板图片和需要匹配的图片:
模板:

需要匹配的图片:

下面来看代码:
import cv2
import copy
import math
import matplotlib.pyplot as plt
import matplotlib as mpl
import numpy as np
import ospath=r'D:\learn\photo\cv\lena.jpg'
path2=r'D:\learn\photo\cv\face.jpg'img=cv2.imread(path,1)img_gray=cv2.imread(path,0)img_template=cv2.imread(path2,1)img_gray_template=cv2.imread(path2,0)def cv_show(name,img):cv2.imshow(name,img)#cv2.waitKey(0),接收0,表示窗口暂停cv2.waitKey(0)#销毁所有窗口cv2.destroyAllWindows()print(img.shape)
print(img_template.shape)
h, w = img_template.shape[:2]
"""
- TM_SQDIFF:计算平方不同,计算出来的值越小,越相关
- TM_SQDIFF_NORMED:计算归一化平方不同,计算出来的值越接近0,越相关
- TM_CCORR:计算相关性,计算出来的值越大,越相关
- TM_CCOEFF:计算相关系数,计算出来的值越大,越相关
- TM_CCORR_NORMED:计算归一化相关性,计算出来的值越接近1,越相关
- TM_CCOEFF_NORMED:计算归一化相关系数,计算出来的值越接近1,越相关
链接:https://docs.opencv.org/3.3.1/df/dfb/group__imgproc__object.html#ga3a7850640f1fe1f58fe91a2d7583695d
"""methods = ['cv2.TM_CCOEFF', 'cv2.TM_CCOEFF_NORMED', 'cv2.TM_CCORR','cv2.TM_CCORR_NORMED', 'cv2.TM_SQDIFF', 'cv2.TM_SQDIFF_NORMED']res = cv2.matchTemplate(img, img_template, cv2.TM_SQDIFF)
print(res.shape)
# exit()min_val, max_val, min_loc, max_loc = cv2.minMaxLoc(res)
print(min_val, max_val, min_loc, max_loc)for meth in methods:img2 = img.copy()# 匹配方法的真值method = eval(meth)print(method)res = cv2.matchTemplate(img, img_template, method)min_val, max_val, min_loc, max_loc = cv2.minMaxLoc(res)# 如果是平方差匹配TM_SQDIFF或归一化平方差匹配TM_SQDIFF_NORMED,取最小值if method in [cv2.TM_SQDIFF, cv2.TM_SQDIFF_NORMED]:top_left = min_locelse:top_left = max_locbottom_right = (top_left[0] + w, top_left[1] + h)# 画矩形cv2.rectangle(img2, top_left, bottom_right, 255, 2)plt.subplot(121), plt.imshow(res,'gray')plt.xticks([]), plt.yticks([]) # 隐藏坐标轴plt.subplot(122), plt.imshow(img2[:,:,::-1])plt.xticks([]), plt.yticks([])plt.suptitle(meth)plt.show()
运行结果如下:


相关文章:
python opencv -模板匹配
python opencv -模板匹配 模板匹配就是,我们现有一个模板和一个图片,然后,在这个图片中寻找和模板近似的部分。 在opencv 中主要通过cv2.matchTemplate这个函数去实现。 下面我们先看一下,模板图片和需要匹配的图片:…...
大数据技能大赛(高职组)答案
任务C:数据挖掘(10分) 所有模块都有,不是白嫖!!有需要可以联系我 环境说明: 服务端登录地址详见各任务服务端说明。 补充说明:各节点可通过Asbru工具或SSH客户端进行SSH访问…...
C++动态规划算法:最多可以参加的会议数目
本周推荐阅读 C二分算法:得到子序列的最少操作次数 本题的其它解法 C二分算法:最多可以参加的会议数目 II 本文涉及的基础知识点 二分查找算法合集 题目 给你一个 events 数组,其中 events[i] [startDayi, endDayi, valuei] …...
Windows 下安装MySQL8.0 Zip
1、将下载的mysql 压缩包解压。 2、已管理员身份证 打开 cmd窗口,进入到解压目录的,本文以解压到 D:\soft\mysql-8.0.29-winx64 为例来介绍。 3、在解压目录下 新建一个 my.ini 文件。 my.ini 文件内容如下: [mysqld] # 设置3306端口 por…...
8.2 Windows驱动开发:内核解锁与强删文件
在某些时候我们的系统中会出现一些无法被正常删除的文件,如果想要强制删除则需要在驱动层面对其进行解锁后才可删掉,而所谓的解锁其实就是释放掉文件描述符(句柄表)占用,文件解锁的核心原理是通过调用ObSetHandleAttri…...
【Spark源码分析】事件总线机制分析
Spark事件总线机制 采用Spark2.11源码,以下类或方法被DeveloperApi注解额部分,可能出现不同版本不同实现的情况。 Spark中的事件总线用于接受事件并提交到对应的监听器中。事件总线在Spark应用启动时,会在SparkContext中激活spark运行的事件总…...
c语言第七弹--扫雷小游戏!
今天做一个有趣的扫雷小游戏 现在正式开始设计。 思路:想要根本上实现必须拥有 实现函数的主体.c文件 头文件.h 及头文件实现.c。 头文件.h #pragma once #include <stdio.h> #include <stdlib.h> #include <time.h> #define EASY_COUNT 10 #d…...
浏览器是什么
浏览器是什么 本文简要介绍浏览器的功能和组成。 浏览器(Web Browser)是一种用于访问和浏览互联网上的网页和资源的软件应用程序。它是用户与互联网交互的主要工具之一。 浏览器通过使用网络协议(如HTTP、HTTPS等)与远程服务器通…...
一文彻底看懂Python切片,Python切片理解与操作
1.什么是切片 切片是Python中一种用于操作序列类型(如列表、字符串和元组)的方法。它通过指定起始索引和结束索引来截取出序列的一部分,形成一个新的序列。切片是访问特定范围内的元素,就是一个Area。 说个笑话:切片不是切片,而是切片,但是又是切片。大家理解下呢(末…...
聊聊tomcat的connection-timeout
序 本文主要研究一下tomcat的connection-timeout ServerProperties.Tomcat org/springframework/boot/autoconfigure/web/ServerProperties.java public static class Tomcat {/*** Access log configuration.*/private final Accesslog accesslog new Accesslog();/*** Th…...
HCIA-RS基础:动态路由协议基础
摘要:本文介绍动态路由协议的基本概念,为后续动态路由协议原理课程提供基础和引入。主要讲解常见的动态路由协议、动态路由协议的分类,以及路由协议的功能和自治系统的概念。文章旨在优化标题吸引力,并通过详细的内容夯实读者对动…...
jQuery 第十一章(表单验证插件推荐)
文章目录 前言jValidateZebra FormjQuery.validValValidityValidForm BuilderForm ValidatorProgressionformvalidationjQuery Validation PluginjQuery Validation EnginejQuery ValidateValidarium后言 前言 hello world欢迎来到前端的新世界 😜当前文章系列专栏&…...
SSL握手失败的解决方案
一、SSL握手失败的原因: 1,证书过期:SSL证书有一个有效期限,如果证书过期,就会导致SSL握手失败。 2,证书不被信任:如果网站的SSL证书不被浏览器或操作系统信任,也会导致SSL握手失败…...
K8S客户端一 Rancher的安装
一 安装方式一 通过官网方式安装:官网 sudo docker run --privileged -d --restartunless-stopped -p 80:80 -p 443:443 rancher/rancher:stable访问服务器地址即可:http://192.168.52.128 修改语言 第一次安装会生成密码,查看密码步骤如下…...
websocket与node.js实现
什么是 websocket? websoket 是一种网络通信协议,基于 tcp 连接的全双工通信协议(客户端和服务器可以同时收发信息),值得注意的是他不基于 http 协议,websocket 只有在建立连接的时候使用到 http 协议进行…...
postpresql 查询某张表的字段名和字段类型
postpresql 查询某张表的字段名和字段类型 工作中第一次接触postpresql,接触到这么个需求,只是对sql有点了解,于是就网上查阅资料。得知通过系统表可以查询,设计到几张系统表:pg_class、pg_attrubute、information_sc…...
jetson NX部署Yolov8
一,事情起因,由于需要对无人机机载识别算法进行更新,所以需要对yolov8算法进行部署到边缘端。 二,环境安装 安装虚拟环境管理工具,这个根据个人喜好。 我们需要选择能够在ARM架构上运行的conda,这里我们选择conda-forge 下载地址 安装即可 剩下的就是和conda 创建虚拟…...
【论文阅读笔记】Emu Edit: Precise Image Editing via Recognition and Generation Tasks
【论文阅读笔记】Emu Edit: Precise Image Editing via Recognition and Generation Tasks 论文阅读笔记论文信息摘要背景方法结果额外 关键发现作者动机相关工作1. 使用输入和编辑图像的对齐和详细描述来执行特定的编辑2. 另一类图像编辑模型采用输入掩码作为附加输入 。3. 为…...
python:列表的拷贝详解
python:列表的拷贝详解 文章目录 python:列表的拷贝详解方法1:直接赋值()方法2:浅拷贝(.copy方法)格式原理注意 方法3:深拷贝(.deepcopy方法)格式…...
zip4j压缩使用总结
一、引入依赖 <dependency><groupId>net.lingala.zip4j</groupId><artifactId>zip4j</artifactId><version>1.3.1</version></dependency>二、使用添加文件(addFiles)的方式生成压缩包 /*** Author wan…...
HarmonyOS6 ArkTS TextInput组件使用文档
文章目录完整代码核心基础配置1. 组件初始化参数2. 控制器创建3. 响应式状态变量基础样式自定义1. 占位符样式定制2. 输入文字样式定制3. 光标与文本对齐样式4. 通用布局样式核心输入控制能力1. 输入类型切换(InputType)2. 字数限制与计数器3. 输入过滤&…...
HPH构造拆解:看懂三大系统
说起这HPH这个缩写,兴许好多人会觉着生疏。可要是告知你,在食品、医药、新能源、化工等行业里的超细加工环节全都离不开它,你没准就会对这种精密设备生出兴趣来了。HPH,全称作高压均质机(High Pressure Homogenizer&am…...
FFXIV_ACT_CutsceneSkip插件深度解析:进阶自动化跳过副本动画的实战方案
FFXIV_ACT_CutsceneSkip插件深度解析:进阶自动化跳过副本动画的实战方案 【免费下载链接】FFXIV_ACT_CutsceneSkip 项目地址: https://gitcode.com/gh_mirrors/ff/FFXIV_ACT_CutsceneSkip FFXIV_ACT_CutsceneSkip是一款专为《最终幻想XIV》中国服务器设计的…...
智能体角色设定基础:专家、助手、执行者模式
文章目录前言一、2026年AI智能体落地现状:角色化成为刚需1.1 通用大模型的天然短板1.2 角色设定:解决智能体失控的核心方案二、智能体三大核心角色模式深度解析2.1 专家模式:垂直领域的专业决策者2.1.1 核心定位与能力边界2.1.2 技术实现逻辑…...
【定位代码介绍】基于聚类算法的静止点RSSI多次采样定位(matlab代码)
对于静止点的RSSI定位,信号强度的漂移导致可以从时域方面入手,连续多次采集RSSI,定位后得到多个可能的点,聚类后,继续求平均(如果需要,也能改成加权平均,效果怎么样自行判断…...
【保姆级教程】Gemma 4 完整体本地部署:突破性能上限,打造你的最强私有化AI
一、 核心亮点:为什么选 Gemma 4?Gemma 4 不仅仅是参数量的提升,更在以下维度进行了深度优化:上下文窗口翻倍:支持更长文档的理解与处理。推理逻辑进化:在逻辑编程和数学运算上更接近闭源旗舰模型。极低损耗…...
告别Python!用C++和TensorRT 7.2.3加速SuperPoint+SuperGlue,在Jetson NX上实测15+FPS
边缘计算实战:用C和TensorRT在Jetson NX上实现SuperPointSuperGlue 15FPS 当无人机需要在复杂环境中自主避障,或是服务机器人在动态场景中实时定位时,特征匹配算法的性能直接决定了系统的响应速度。传统基于Python的SuperPointSuperGlue方案在…...
避坑指南:用STM32CubeMX配置MODBUS从机时,串口DMA和HAL库回调函数那些容易踩的‘坑’
STM32CubeMX配置MODBUS从机:DMA与HAL库回调函数避坑实战 当你在深夜调试MODBUS从机程序时,突然发现串口接收的数据总是莫名其妙丢失最后几个字节——这种场景是否似曾相识?作为嵌入式开发者,我们都经历过从基础中断收发升级到DMA传…...
LILYGO T-FPGA开发套件:ESP32-S3与FPGA协同开发指南
1. LILYGO T-FPGA开发套件概览LILYGO T-FPGA开发套件是一款将ESP32-S3无线微控制器与Gowin GW1NSR-4C FPGA集成在一起的创新硬件平台。这个M.2规格的模块设计非常巧妙,通过标准接口可以轻松插入配套的扩展底板,为开发者提供了完整的物联网可编程逻辑开发…...
别再硬套MTL了!聊聊谷歌MMoE如何优雅解决推荐系统里的‘任务打架’问题
多任务学习中的优雅解法:MMoE如何破解推荐系统任务冲突难题 当推荐系统需要同时优化点击率、点赞、完播率等多个指标时,算法工程师们常常陷入两难境地——单任务建模无法利用跨目标信息,而粗暴共享参数又会导致"跷跷板效应"。谷歌2…...
