机器学习: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

相关文章

使用Python和OpenCV库实现实时颜色识别系统

《使用Python和OpenCV库实现实时颜色识别系统》:本文主要介绍使用Python和OpenCV库实现的实时颜色识别系统,这个系统能够通过摄像头捕捉视频流,并在视频中指定区域内识别主要颜色(红... 目录一、引言二、系统概述三、代码解析1. 导入库2. 颜色识别函数3. 主程序循环四、HSV色彩空间详解

OpenCV实现实时颜色检测的示例

《OpenCV实现实时颜色检测的示例》本文主要介绍了OpenCV实现实时颜色检测的示例,通过HSV色彩空间转换和色调范围判断实现红黄绿蓝颜色检测,包含视频捕捉、区域标记、颜色分析等功能,具有一定的参考... 目录一、引言二、系统概述三、代码解析1. 导入库2. 颜色识别函数3. 主程序循环四、HSV色彩空间

Go学习记录之runtime包深入解析

《Go学习记录之runtime包深入解析》Go语言runtime包管理运行时环境,涵盖goroutine调度、内存分配、垃圾回收、类型信息等核心功能,:本文主要介绍Go学习记录之runtime包的... 目录前言:一、runtime包内容学习1、作用:① Goroutine和并发控制:② 垃圾回收:③ 栈和

Android学习总结之Java和kotlin区别超详细分析

《Android学习总结之Java和kotlin区别超详细分析》Java和Kotlin都是用于Android开发的编程语言,它们各自具有独特的特点和优势,:本文主要介绍Android学习总结之Ja... 目录一、空安全机制真题 1:Kotlin 如何解决 Java 的 NullPointerExceptio

Python中OpenCV与Matplotlib的图像操作入门指南

《Python中OpenCV与Matplotlib的图像操作入门指南》:本文主要介绍Python中OpenCV与Matplotlib的图像操作指南,本文通过实例代码给大家介绍的非常详细,对大家的学... 目录一、环境准备二、图像的基本操作1. 图像读取、显示与保存 使用OpenCV操作2. 像素级操作3.

C/C++中OpenCV 矩阵运算的实现

《C/C++中OpenCV矩阵运算的实现》本文主要介绍了C/C++中OpenCV矩阵运算的实现,包括基本算术运算(标量与矩阵)、矩阵乘法、转置、逆矩阵、行列式、迹、范数等操作,感兴趣的可以了解一下... 目录矩阵的创建与初始化创建矩阵访问矩阵元素基本的算术运算 ➕➖✖️➗矩阵与标量运算矩阵与矩阵运算 (逐元

C/C++的OpenCV 进行图像梯度提取的几种实现

《C/C++的OpenCV进行图像梯度提取的几种实现》本文主要介绍了C/C++的OpenCV进行图像梯度提取的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的... 目录预www.chinasem.cn备知识1. 图像加载与预处理2. Sobel 算子计算 X 和 Y

C/C++和OpenCV实现调用摄像头

《C/C++和OpenCV实现调用摄像头》本文主要介绍了C/C++和OpenCV实现调用摄像头,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一... 目录准备工作1. 打开摄像头2. 读取视频帧3. 显示视频帧4. 释放资源5. 获取和设置摄像头属性

c/c++的opencv图像金字塔缩放实现

《c/c++的opencv图像金字塔缩放实现》本文主要介绍了c/c++的opencv图像金字塔缩放实现,通过对原始图像进行连续的下采样或上采样操作,生成一系列不同分辨率的图像,具有一定的参考价值,感兴... 目录图像金字塔简介图像下采样 (cv::pyrDown)图像上采样 (cv::pyrUp)C++ O

c/c++的opencv实现图片膨胀

《c/c++的opencv实现图片膨胀》图像膨胀是形态学操作,通过结构元素扩张亮区填充孔洞、连接断开部分、加粗物体,OpenCV的cv::dilate函数实现该操作,本文就来介绍一下opencv图片... 目录什么是图像膨胀?结构元素 (KerChina编程nel)OpenCV 中的 cv::dilate() 函