欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 文旅 > 艺术 > 机器学习:opencv图像识别--模版匹配

机器学习:opencv图像识别--模版匹配

2025/9/1 22:05:10 来源:https://blog.csdn.net/weixin_65047977/article/details/141941814  浏览:    关键词:机器学习:opencv图像识别--模版匹配

目录

一、模版匹配的核心概念

1.图片模板匹配是一种用于在图像中查找特定模式或对象的技术。

2.模板图像

3.目标图像

4.滑动窗口

5.相似度度量

6.匹配位置

二、模版匹配的步骤

1.准备图像:

2.预处理:

3.匹配:

4.定位最佳匹配:

5.标记结果:

6.显示或处理结果:

三、代码实现


一、模版匹配的核心概念

1.图片模板匹配是一种用于在图像中查找特定模式或对象的技术。

 

2.模板图像

  • 这是你要在目标图像中找到的部分。模板图像通常比目标图像小,并且包含你感兴趣的特征。        

 

3.目标图像

  • 这是包含模板图像的图像。在目标图像中,你希望找到与模板图像匹配的区域。

 

4.滑动窗口

  • 模板图像像一个窗口一样在目标图像上滑动。这种滑动可以是从左到右,从上到下,或以其他方式覆盖整个目标图像。

 

5.相似度度量

在每个窗口位置,计算模板图像与目标图像窗口区域的相似度。常见的相似度度量包括:

  • 归一化互相关(NCC):衡量两个图像块之间的相似度,通过比较像素值的相关性。
  • 均方误差(MSE):计算模板图像与目标图像窗口区域之间的像素差异的平方和。
  • 结构相似性(SSIM):评估图像的亮度、对比度和结构相似度。

 

6.匹配位置

  • 通过比较相似度度量的结果,确定模板图像在目标图像中最佳的匹配位置。通常,最大或最小的相似度值指示了最佳匹配。

 

二、模版匹配的步骤

1.准备图像

  • 目标图像:这是你希望在其中查找模板图像的图像。
  • 模板图像:这是你要在目标图像中查找的图像片段或图案。

 

2.预处理

  • 灰度化(可选):将目标图像和模板图像转换为灰度图像,以简化计算和提高效率(对于一些匹配方法,灰度化是可选的)。

 

3.匹配

  • 使用匹配算法计算模板图像与目标图像不同位置之间的相似度。这些算法会生成一个相似度矩阵,矩阵中的每个值表示模板图像在目标图像某个位置的匹配度。

 

4.定位最佳匹配

  • 从相似度矩阵中找出最佳匹配的位置。通常,这会是矩阵中的最大值(表示最相似的区域)。

 

5.标记结果

  • 在目标图像上标记出匹配区域,通常是通过绘制一个矩形框来突出显示找到的模板图像的位置。

 

6.显示或处理结果

  • 显示带有匹配标记的目标图像,或将结果保存以供后续处理。

 

三、代码实现

  • 完整代码 以及函数参数介绍
  • 使用的是cv2.matchTemplate()方法
"""模版匹配"""# cv2.matchTemplate(image, templ, method, result=None, mask=None)
# image:待搜索图像
# templ:模板图像
# method:计算匹配程度的方法,可以有:
#       TM_SQDIFF 平方差匹配法:该方法采用平方差来进行匹配;匹配越好,值越小;匹配越差,值越大。
#       TM_CCORR 相关匹配法:该方法采用乘法作;数值越大表明匹配程度越好。
#       TM_CCOEFF 相关系数匹配法:数值越大表明匹配程度越好。
#       TM_SQDIFF_NORMED 归一化平方差匹配法,匹配越好,值越小;匹配越差,值越大。
#       TM_CCORR_NORMED 归一化相关匹配法,数值越大表明匹配程度越好。
#       TM_CCOEFF_NORMED 归一化相关系数匹配法,数值越大表明匹配程度越好。import cv2kele = cv2.imread('baishi.jpg')
moban = cv2.imread('baishikele.png')
cv2.imshow('baishi', kele)
cv2.imshow('moban', moban)
cv2.waitKey(0)h, w = moban.shape[:2]  # 获取模版图片的高宽
res = cv2.matchTemplate(kele, moban, cv2.TM_CCOEFF_NORMED)   # 返回一个矩阵,其中每个元素表示该位置与模板的匹配程度
# cv2.minMaxLoc可以获取矩阵中的最小值和最大值,以及最小值的索引号和最大值的索引号
min_val, max_val, min_loc, max_loc = cv2.minMaxLoc(res)  # 最小值、最大值、最小值位置、最大值位置
top_left = max_loc  # 最大值为匹配到的模板的左上角
bottom_right = (top_left[0] + w, top_left[1] + h)  # 主图片中用模版匹配到的位置
kele_template = cv2.rectangle(kele, top_left, bottom_right, (0, 0, 255), thickness=3)cv2.imshow('kele_template', kele_template)
cv2.waitKey(0)

输出:

也可以自己找图片进行截图尝试模版匹配

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词