Opencv+python模板匹配

我们经常玩匹配图像或者找相似,opencv可以很好实现这个简单的小功能。

模板是被查找目标的图像,查找模板在原始图像中的哪个位置的过程就叫模板匹配。OpenCV提供的matchTemplate()方法就是模板匹配方法,其语法如下:

result = cv2.matchTemplate(image, templ, method, mask)

参数说明:

image:原始图像。

templ:模板图像,尺寸必须小于或等于原始图像。

method:匹配的方法,可用参数值如表10.1所示。

mask:可选参数。掩模,只有cv2.TM_SQDIFF和cv2.TM_CCORR_NORMED支持此参数,建议采用默认值。

返回值说明:

result:计算得出的匹配结果。如果原始图像的宽、高分别为W、H,模板图像的宽、高分别为w、h,result就是一个W-w+1列、H-h+1行的32位浮点型数组。数组中每一个浮点数都是原始图像中对应像素位置的匹配结果,其含义需要根据method参数来解读。

在模板匹配的计算过程中,模板会在原始图像中移动。模板与重叠区域内的像素逐个对比,最后将对比的结果保存在模板左上角像素点索引位置对应的数组位置中

OpenCV的matchTemplate函数是用来在一幅图像中寻找另一幅图像的匹配的。在匹配过程中,可以选择不同的匹配方法,也就是method参数。常用的method参数有以下几种:

  • cv2.TM_SQDIFF:平方差匹配法,最简单的匹配方法,计算平方差和,值越小越匹配。

  • cv2.TM_SQDIFF_NORMED:标准平方差匹配法,同样计算平方差和,但是会对结果进行标准化处理。注意使用距离来计算被匹配图像一定要小于原图像

  • cv2.TM_CCORR:相关性匹配法,#,值越大越匹配。

  • cv2.TM_CCORR_NORMED:标准相关性匹配法,对结果进行标准化处理,返回值越大表示匹配程度越高,越小表示匹配程度越低。

该参数使用的是归一化相关系数匹配模式,

返回的是匹配图像和模板图像之间的相关系数,取值范围在 0 到 1 之间,1 表示完美匹配,0 表示没有匹配。

  • cv2.TM_CCOEFF:相关系数匹配法,计算两个图像的相关系数,值越大越匹配。

  • cv2.TM_CCOEFF_NORMED:标准相关系数匹配法,对结果进行标准化处理。

假设原图如下:

需要找出的图是西瓜

代码:

复制代码
import cv2
import matplotlib.pyplot as plt
import numpy as np
# 读取图像
image = cv2.imread("./image/20240626-3.jpg") #多图
grayImg = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
matchImg = cv2.imread("./image/20240626-4.jpg", 0) #匹配的图

# 模板匹配
result = cv2.matchTemplate(grayImg, matchImg, cv2.TM_CCORR_NORMED)
threshold = 0.999

# 找到匹配的位置
loc = np.where(result >= threshold)

# 绘制矩形
for pt in zip(*loc[::-1]):  # 交换坐标顺序
    cv2.rectangle(image, pt, (pt[0] + matchImg.shape[1], pt[1] + matchImg.shape[0]), (0, 0, 255), 2)

# 显示结果
# 使用 OpenCV 显示
cv2.imshow('Matched Image', image)
cv2.waitKey(0)
cv2.destroyAllWindows()

# 或者使用 Matplotlib 显示(如果需要)
# plt.imshow(cv2.cvtColor(image, cv2.COLOR_BGR2RGB))  # 注意:将 BGR 转换为 RGB 以供 Matplotlib 显示
# plt.show()

结果:

复制代码
1、当阈值threshold = 0.999,因为我匹配图就是这个截图,哈哈哈哈

2、当阈值threshold = 0.98

3 、当阈值threshold = 0.9

如果有错注意要有OpenCV 的 contrib 版本

pip install opencv-contrib-python==4.5.3.56

相关推荐
2501_9421917712 小时前
RetinaNet与伪装目标检测:提升模型识别能力的实战指南
人工智能·目标检测·目标跟踪
2501_9413331012 小时前
【工业视觉检测】基于YOLOv8的皮带输送机关键部件检测与识别系统完整实现
人工智能·yolo·视觉检测
yukai0800812 小时前
【最后203篇系列】036 MDP学习思考
人工智能·学习
大模型玩家七七12 小时前
安全对齐不是消灭风险,而是重新分配风险
android·java·数据库·人工智能·深度学习·安全
格林威12 小时前
Baumer相机电池极耳对齐度检测:提升叠片工艺精度的 5 个实用方案,附 OpenCV+Halcon 实战代码!
人工智能·opencv·机器学习·计算机视觉·视觉检测·工业相机·堡盟相机
2501_9413297212 小时前
基于Centernet的甜菜幼苗生长状态识别与分类系统
人工智能·分类·数据挖掘
洁洁!12 小时前
JDK21→25升级实战:飞算Java AI专业版帮我自动适配了哪些坑?
人工智能·科技·语言模型·数据分析·飞算javaai·ai开发工具
有颜有货12 小时前
GEO(生成引擎优化)是什么?GEO的工作流程详解
人工智能·chatgpt·geo
云卓SKYDROID12 小时前
解析云卓科技C11吊舱的工业级三轴增稳结构
人工智能·科技·无人机·飞控·技术·高科技
360智汇云12 小时前
让 AI 可见 :智能体对话全面升级数字人能力
人工智能·语音识别