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

2024-09-06 05:12

本文主要是介绍机器学习: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)

输出:

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

这篇关于机器学习:opencv图像识别--模版匹配的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1141096

相关文章

Java 正则表达式URL 匹配与源码全解析

《Java正则表达式URL匹配与源码全解析》在Web应用开发中,我们经常需要对URL进行格式验证,今天我们结合Java的Pattern和Matcher类,深入理解正则表达式在实际应用中... 目录1.正则表达式分解:2. 添加域名匹配 (2)3. 添加路径和查询参数匹配 (3) 4. 最终优化版本5.设计思

在PyCharm中安装PyTorch、torchvision和OpenCV详解

《在PyCharm中安装PyTorch、torchvision和OpenCV详解》:本文主要介绍在PyCharm中安装PyTorch、torchvision和OpenCV方式,具有很好的参考价值,... 目录PyCharm安装PyTorch、torchvision和OpenCV安装python安装PyTor

openCV中KNN算法的实现

《openCV中KNN算法的实现》KNN算法是一种简单且常用的分类算法,本文主要介绍了openCV中KNN算法的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的... 目录KNN算法流程使用OpenCV实现KNNOpenCV 是一个开源的跨平台计算机视觉库,它提供了各

Python中使用正则表达式精准匹配IP地址的案例

《Python中使用正则表达式精准匹配IP地址的案例》Python的正则表达式(re模块)是完成这个任务的利器,但你知道怎么写才能准确匹配各种合法的IP地址吗,今天我们就来详细探讨这个问题,感兴趣的朋... 目录为什么需要IP正则表达式?IP地址的基本结构基础正则表达式写法精确匹配0-255的数字验证IP地

OpenCV图像形态学的实现

《OpenCV图像形态学的实现》本文主要介绍了OpenCV图像形态学的实现,包括腐蚀、膨胀、开运算、闭运算、梯度运算、顶帽运算和黑帽运算,文中通过示例代码介绍的非常详细,需要的朋友们下面随着小编来一起... 目录一、图像形态学简介二、腐蚀(Erosion)1. 原理2. OpenCV 实现三、膨胀China编程(

浅谈配置MMCV环境,解决报错,版本不匹配问题

《浅谈配置MMCV环境,解决报错,版本不匹配问题》:本文主要介绍浅谈配置MMCV环境,解决报错,版本不匹配问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录配置MMCV环境,解决报错,版本不匹配错误示例正确示例总结配置MMCV环境,解决报错,版本不匹配在col

详解nginx 中location和 proxy_pass的匹配规则

《详解nginx中location和proxy_pass的匹配规则》location是Nginx中用来匹配客户端请求URI的指令,决定如何处理特定路径的请求,它定义了请求的路由规则,后续的配置(如... 目录location 的作用语法示例:location /www.chinasem.cntestproxy

opencv图像处理之指纹验证的实现

《opencv图像处理之指纹验证的实现》本文主要介绍了opencv图像处理之指纹验证的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学... 目录一、简介二、具体案例实现1. 图像显示函数2. 指纹验证函数3. 主函数4、运行结果三、总结一、

python+opencv处理颜色之将目标颜色转换实例代码

《python+opencv处理颜色之将目标颜色转换实例代码》OpenCV是一个的跨平台计算机视觉库,可以运行在Linux、Windows和MacOS操作系统上,:本文主要介绍python+ope... 目录下面是代码+ 效果 + 解释转HSV: 关于颜色总是要转HSV的掩膜再标注总结 目标:将红色的部分滤

Java进阶学习之如何开启远程调式

《Java进阶学习之如何开启远程调式》Java开发中的远程调试是一项至关重要的技能,特别是在处理生产环境的问题或者协作开发时,:本文主要介绍Java进阶学习之如何开启远程调式的相关资料,需要的朋友... 目录概述Java远程调试的开启与底层原理开启Java远程调试底层原理JVM参数总结&nbsMbKKXJx