OpenCV笔记:模板匹配 cv2.matchTemplate()、cv2.minMaxLoc() 与 绘制矩形 cv2.rectangle() 方法介绍

这篇具有很好参考价值的文章主要介绍了OpenCV笔记:模板匹配 cv2.matchTemplate()、cv2.minMaxLoc() 与 绘制矩形 cv2.rectangle() 方法介绍。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

cv2.rectangle,《Python从入门到精通》,opencv,机器学习,匹配

导读

        模板匹配是用来在一副大图中搜寻查找模版图像位置的方法。绘制矩形是用来将模版图像的匹配结果展示出来的方法。

        模板匹配实现简单(2~3行代码),计算效率高,不需要执行阈值化、边缘检测等操作来生成二值化图像。但是:如果输入图像中存在变化的因素,包括旋转、缩放、视角变化等,模板匹配很容易就会失效。除非:旋转、缩放、视角变化恒定的情况下,模板匹配也可以完美发挥作用

        如果你的输入图像中包含这些类型的变化因素,那么你不应使用模板匹配,而应该使用专用的对象检测器,包括:HOG + 线性 SVM,Faster R-CNN,SSD,YOLO 等。

        你可能需要的文章:

  • 关于:Python基础,爬虫,常见异常和面试【篇】(专题汇总)

正文

        OpenCV 为我们提供了函数: cv2.matchTemplate() 用于实现模板匹配,并使用 cv2.minMaxLoc() 计算匹配结果,最后通过 cv2.rectangle() 绘制矩形展示匹配结果。

一、方法介绍

1. cv2.matchTemplate()

1.1 作用

        模板匹配是在一幅图像中寻找一个特定目标的方法,这种方法的原理非常简单:依次遍历图像中的每一个可能的位置,比较各处与模板是否“相似”,当相似度足够高时,就认为找到了我们的目标。

cv2.rectangle,《Python从入门到精通》,opencv,机器学习,匹配

1.2 使用方法

res = cv2.matchTemplate(image, templ, method, result=None, mask=None)
  • image:输入一个待匹配的图像,支持8U或者32F;
  • templ:输入一个模板图像,需与image相同类型;
  • method:要使用的数据匹配算法。
  • result:输出保存结果的矩阵,32F类型;

1.3 匹配算法

        OpenCV提供了6种模板匹配算法。

method 名称 含义
TM_SQDIFF 平方差匹配

计算模板与目标图像的方差,由于是像素值差值的平方的和,所以值越小匹配程度越高。

TM_CCORR  相关匹配 该方法采用乘法操作;数值越大表名匹配程度越好。
TM_CCOEFF  相关系数匹配 计算相关系数,1表示完美匹配;-1表示最差匹配。
TM_SQDIFF_NORMED  归一化平方差匹配 计算归一化平方差,计算出来的值越接近0,越相关。
TM_CCORR_NORMED  归一化相关匹配 计算归一化相关性,计算出来的值越接近1,越相关。
TM_CCOEFF_NORMED  归一化相关系数匹配 计算归一化相关系数,计算出来的值越接近1,越相关。

         下面是匹配算法的公式,额,别问我这些公式什么意思,我也不懂,官网上扒下来的,看看就好。

cv2.rectangle,《Python从入门到精通》,opencv,机器学习,匹配

2. cv2.minMaxLoc()

2.1 作用

        根据 cv2.matchTemplate() 的匹配结果,返回图形坐标结果。

2.2 使用方法

min_val, max_val, min_loc, max_loc = cv2.minMaxLoc(ret) 
  • ret:是 cv2.matchTemplate() 返回的矩阵;
  • min_val:最小值;
  • max_val:最大值;
  • min_loc:最小值对应的图像中的位置;
  • max_loc:最大值对应的图像中的位置;

3. cv2.rectangle()

3.1 作用

        绘制矩形:在图片 img 上画长方形,坐标原点是图片左上角,向右为x轴正方向,向下为y轴正方向。

3.2 使用方法

cv2.rectangle(img, pt1, pt2, color, thickness, lineType, shift )
  • img:底图;
  • pt1:矩形的左上角坐标;
  • pt2:矩形的右下角坐标;
  • color:线条的颜色,BGR;
  • thickness:线的粗细,数值越大线越粗;

二、实战操作

1. 图片准备

        待匹配图片 image(博客首页的图),模板图片 templ 如下:

cv2.rectangle,《Python从入门到精通》,opencv,机器学习,匹配

2. 代码展示

# _*_coding:utf-8_*_
# 作者:Java Punk
# 时间:2022-10-09 14:49:45
# 功能:方法学习:cv2.matchTemplate(), cv2.minMaxLoc(), cv2.rectangle()

import cv2 as cv2
import numpy as np
from matplotlib import pyplot as plt

# 单个模板匹配
def one_match(image, templ):
    # 1.读取图片
    img = cv2.imread(image)
    template = cv2.imread(templ)
    h, w = template.shape[:2]
    # 2.匹配模板
    res = cv2.matchTemplate(img, template, cv2.TM_CCOEFF_NORMED)
    min_val, max_val, min_loc, max_loc = cv2.minMaxLoc(res)
    # 3.计算矩形左边
    top_left = max_loc
    bottom_right = (top_left[0] + w, top_left[1] + h)
    # 4.画矩形
    cv2.rectangle(img, top_left, bottom_right, (255, 0, 0), 5)
    # 5.展示结果
    cv2.imshow('img_rgb', img)
    cv2.waitKey(0)
    pass

if __name__ == '__main__':
    print("———————————————————— start ————————————————————\n")
    # 图片路径自己设置,下面是我本地的路径,记得替换!!!
    one_match('../img/test/guimie_01.jpg', '../img/test/guimie_02.jpg')
    print("———————————————————— end ————————————————————\n")

3. 结果展示

        完美匹配到了,下面的蓝色方框可不是我画的,是程序画的哈。

cv2.rectangle,《Python从入门到精通》,opencv,机器学习,匹配文章来源地址https://www.toymoban.com/news/detail-762741.html


到了这里,关于OpenCV笔记:模板匹配 cv2.matchTemplate()、cv2.minMaxLoc() 与 绘制矩形 cv2.rectangle() 方法介绍的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包赞助服务器费用

相关文章

  • opencv形状匹配(cv2.matchShape)

    opencv形状匹配(cv2.matchShape)

       

    2024年02月14日
    浏览(8)
  • opencv-python库 cv2 图形绘制 cv2.line()cv2.rectangle()cv2.circle()cv2.ellipse()cv2.polylines()cv2.putText

    cv2.line() 是 OpenCV 中的一个函数,用于在图像上绘制直线。这个函数需要指定图像、线的起点和终点坐标、线的颜色、线的宽度以及线的类型。 下面是 cv2.line() 函数的详细参数说明: 参数解释: 下面是一个使用 cv2.line() 绘制直线的简单示例: 在这个例子中,我们创建了一个

    2024年04月23日
    浏览(52)
  • opencv基础48-绘制图像轮廓并切割示例-cv2.drawContours()

    opencv基础48-绘制图像轮廓并切割示例-cv2.drawContours()

    在 OpenCV 中,可以使用函数 cv2.drawContours()绘制图像轮廓。该函数的语法格式是: image=cv2.drawContours( image, contours, contourIdx, color[, thickness[, lineType[, hierarchy[, maxLevel[, offset]]]]] ) 其中,函数的返回值为 image,表示目标图像,即绘制了边缘的原始图像。 该函数有如下参数: image:待

    2024年02月13日
    浏览(16)
  • 【OpenCV】图像上绘制文字cv2.putText()函数用法,添加倾斜透明水印

    【OpenCV】图像上绘制文字cv2.putText()函数用法,添加倾斜透明水印

    在OpenCV中,调用cv2.putText()函数可添加文字到指定位置,对于需要在图片中加入文字的场景提供了一种比较直接方便的方式。 注意:OpenCV 不支持显示中文字符,使用 cv2.putText() 时添加的文本字符串不能包含中文字符(包括中文标点符号) 其函数原型如下所示: 上述参数分别

    2024年02月04日
    浏览(46)
  • opencv基础49-图像轮廓02-矩特征cv2.moments()->(形状分析、物体检测、图像识别、匹配)

    opencv基础49-图像轮廓02-矩特征cv2.moments()->(形状分析、物体检测、图像识别、匹配)

    矩特征(Moments Features)是用于图像分析和模式识别的一种特征表示方法,用来描述图像的形状、几何特征和统计信息。矩特征可以用于识别图像中的对象、检测形状以及进行图像分类等任务。 矩特征通过计算图像像素的高阶矩来提取特征。这些矩可以表示图像的中心、尺度

    2024年02月13日
    浏览(10)
  • 【跟官网学opencv-python】笔记1.3:opencv鼠标绘图 cv2.setMouseCallback()

    【跟官网学opencv-python】笔记1.3:opencv鼠标绘图 cv2.setMouseCallback()

    目录 前言 目标 函数详解 1、cv2.setMouseCallback()鼠标回调函数 2、鼠标事件简介 代码演示 ​编辑 应用演示 运行效果 参考 跟着官网学习才是基础入门的最佳选择,下文是opencv-python官网的学习记录及扩展! 学习函数cv2.setMouseCallback()并使用鼠标绘制不同图形(矩形、多边形等)

    2024年02月03日
    浏览(12)
  • OpenCV自学笔记十八:模板匹配

    模板匹配是一种在图像中寻找指定模式的方法。OpenCV库提供了用于模板匹配的函数,可以帮助我们在图像中定位和识别特定的模式。下面是模板匹配的基础原理和一个示例: 模板匹配通过在待匹配图像上滑动一个固定大小的模板图像,并计算模板与图像之间的相似度来寻找匹

    2024年02月07日
    浏览(12)
  • cv2.polylines、cv2.fillPoly 和 多边形绘制分割结果Python函数(一)

    cv2.polylines、cv2.fillPoly 和 多边形绘制分割结果Python函数(一)

    如果只是想撸代码,直接看下一篇: https://blog.csdn.net/HaoZiHuang/article/details/127027469 先来铺垫几个用到的函数 cv2.polylines 、 cv2.fillPoly 以下内容部分摘自: http://www.juzicode.com/opencv-python-polylines-puttext 先看一下代码吧: cv2.polylines 的参数: 绘制的画板图 绘制的多边形列表 是否闭合

    2024年02月04日
    浏览(44)
  • python使用cv2获取截图中的匹配项目的中心位置

    在OpenCV中,cv2.matchTemplate()函数用于在大图中查找与小图(模板)匹配的区域,但并不会直接返回一个区域的box。 想要获取匹配区域的边界框(box),以及中心的位置,这样后续好进行自动化操作,。以下是一种方法: 首先,使用cv2.matchTemplate()函数找到匹配的区域。 然后,

    2024年02月09日
    浏览(10)
  • 【OpenCV】透视变换——cv2.getPerspectiveTransform()与cv2.warpPerspective()详解

    【OpenCV】透视变换——cv2.getPerspectiveTransform()与cv2.warpPerspective()详解

    目录 什么是透视变换? 函数解析 cv2.getPerspectiveTransform() dst = warpPerspective() 代码实现 透视变换(Perspective Transformation)是指利用透视中心、像点、目标点三点共线的条件,按透视旋转定律使承影面(透视面)绕迹线(透视轴)旋转某一角度,破坏原有的投影光线束,仍能保持

    2024年02月05日
    浏览(67)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包