Opencv——图像模板匹配

这篇具有很好参考价值的文章主要介绍了Opencv——图像模板匹配。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

引言

什么是模板匹配呢?

opencv 图像匹配,opencv计算机视觉,python,opencv,计算机视觉,pythonopencv 图像匹配,opencv计算机视觉,python,opencv,计算机视觉,pythonopencv 图像匹配,opencv计算机视觉,python,opencv,计算机视觉,pythonopencv 图像匹配,opencv计算机视觉,python,opencv,计算机视觉,pythonopencv 图像匹配,opencv计算机视觉,python,opencv,计算机视觉,python

看到这里大家是否会觉得很熟悉的感觉涌上心头!在人脸识别是不是也会看见 等等。

模板匹配可以看作是对象检测的一种非常基本的形式。使用模板匹配,我们可以使用包含要检测对象的“模板”来检测输入图像中的对象。

一、匹配方法:cv2.matchTemplate(img, templ, method)


参数:(img: 原始图像、temple: 模板图像、method: 匹配度计算方法)

方法如下: 

cv2.TM_SQDIFF: 计算平方差,计算结果越小,越相关

公式:

opencv 图像匹配,opencv计算机视觉,python,opencv,计算机视觉,python

cv2.TM_CCORR: 计算相关性,计算出来的值越大,越相关

公式:

opencv 图像匹配,opencv计算机视觉,python,opencv,计算机视觉,python

cv2.TM_CCOEFF: 计算相关系数,计算出的值越大,越相关

公式:opencv 图像匹配,opencv计算机视觉,python,opencv,计算机视觉,python

cv2.TM_SQDIFF_NORMED: 计算归一化平方差,计算结果越接近0,越相关

公式:

opencv 图像匹配,opencv计算机视觉,python,opencv,计算机视觉,python

 文章来源地址https://www.toymoban.com/news/detail-568444.html

cv2.TM_CCORR_NORMED: 计算归一化相关性,计算结果越接近1,越相关

公式:

opencv 图像匹配,opencv计算机视觉,python,opencv,计算机视觉,python

cv2.TM_CCOEFF_NORMED: 计算归一化相关系数,计算结果越接近1,越相关

 公式:

opencv 图像匹配,opencv计算机视觉,python,opencv,计算机视觉,python

 二、匹配单个对象

img代表原始图像,template代表模板窗口,1默认为cv2.TM_SQDIFF方法

res = cv2.matchTemplate(img, template, 1) 

 获取结果的最值和最值位置(最值位置是左上角的坐标位置,通过模板的宽和高可以在原图上把模板位置画出来)

min_val,max_val,min_loc,max_loc = cv2.minMaxLoc(res)

 完整的代码:

import cv2
import numpy as np
import matplotlib.pyplot as plt
def cv_show(name,img):
    cv2.imshow(name,img)
    cv2.waitKey(0)
    cv2.destroyAllWindows()
img=cv2.imread('C:/Users/bwy/Desktop/7.png',0)
template=cv2.imread('C:/Users/bwy/Desktop/8.png',0)
methods=['cv2.TM_CCOEFF','cv2.TM_CCOEFF_NORMED','cv2.TM_CCORR','cv2.TM_CCORR_NORMED'
        ,'cv2.TM_SQDIFF','cv2.TM_SQDIFF_NORMED']
for meth in methods:
    img3=img.copy()
    method=eval(meth)
    print(meth)
    res1=cv2.matchTemplate(img,template,method)
    min_val,max_val,min_loc,max_loc = cv2.minMaxLoc(res1)
    if method in [cv2.TM_SQDIFF,cv2.TM_SQDIFF_NORMED]:
        top_left=min_loc
    else:
        top_left=max_loc
    bottom_right=(top_left[0]+w,top_left[1]+h)
    #俩矩形
    cv2.rectangle(img3,top_left,bottom_right,255,2)
    plt.subplot(121),plt.imshow(res1,cmap='gray')
    plt.xticks([]),plt.yticks([])#隐藏坐标轴
    plt.subplot(122),plt.imshow(img3,cmap='gray')
    plt.xticks([]),plt.yticks([])#隐藏坐标轴
    plt.suptitle(meth)
    plt.show()

结果如图所示:

opencv 图像匹配,opencv计算机视觉,python,opencv,计算机视觉,pythonopencv 图像匹配,opencv计算机视觉,python,opencv,计算机视觉,pythonopencv 图像匹配,opencv计算机视觉,python,opencv,计算机视觉,python

 opencv 图像匹配,opencv计算机视觉,python,opencv,计算机视觉,pythonopencv 图像匹配,opencv计算机视觉,python,opencv,计算机视觉,pythonopencv 图像匹配,opencv计算机视觉,python,opencv,计算机视觉,python

 多次实验你会发现归一的方法更准确。

 三、匹配多个对象

 1.导包构建函数

import cv2
import numpy as np
import matplotlib.pyplot as plt
def cv_show(name,img):
    cv2.imshow(name,img)
    cv2.waitKey(0)
    cv2.destroyAllWindows()

 2.读入图像转灰度图,改大小。

im=cv2.imread('C:/Users/bwy/Desktop/9.png')
TE=cv2.imread('C:/Users/bwy/Desktop/10.png',cv2.IMREAD_GRAYSCALE)
im1=cv2.resize(im,(600,337))
cv_show('im',im1)
img_=cv2.cvtColor(im1,cv2.COLOR_BGR2GRAY)
TE=cv2.resize(TE,(60,60))
TE.shape

 3.图像匹配

h,w=TE.shape[:2]
r=cv2.matchTemplate(img_,TE,cv2.TM_CCOEFF_NORMED)
cv_show('r',r)

 结果如图所示:

opencv 图像匹配,opencv计算机视觉,python,opencv,计算机视觉,python

4.取匹配程度大于75%的坐标 ,画在原图上

其中:zip(*) 可理解为解压,返回二维矩阵式。loc中loc[0]是高,loc[1]是宽,[::-1]表示倒序。p[0]代表宽,p[1]代表高

threshold=0.75
loc=np.where(r>=threshold)
for pt in zip(*loc[::-1]):#*代表可选参数
    bottom_right=(pt[0]+w,pt[1]+h)
    cv2.rectangle(im1,pt,bottom_right,(0,0,255),1)
cv_show('im1',im1)

 结果如图所示:

opencv 图像匹配,opencv计算机视觉,python,opencv,计算机视觉,python

 

到了这里,关于Opencv——图像模板匹配的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

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

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

相关文章

  • 计算机竞赛 深度学习 opencv python 公式识别(图像识别 机器视觉)

    🔥 优质竞赛项目系列,今天要分享的是 🚩 基于深度学习的数学公式识别算法实现 该项目较为新颖,适合作为竞赛课题方向,学长非常推荐! 🥇学长这里给一个题目综合评分(每项满分5分) 难度系数:3分 工作量:4分 创新点:4分 🧿 更多资料, 项目分享: https://gitee.com/d

    2024年02月07日
    浏览(44)
  • 【OpenCV+OCR】计算机视觉:识别图像验证码中指定颜色文字

    【作者主页】: 吴秋霖 【作者介绍】:Python领域优质创作者、阿里云博客专家、华为云享专家。长期致力于Python与爬虫领域研究与开发工作! 【作者推荐】:对JS逆向感兴趣的朋友可以关注《爬虫JS逆向实战》,对分布式爬虫平台感兴趣的朋友可以关注《分布式爬虫平台搭建

    2024年02月05日
    浏览(39)
  • OpenCV处理图像和计算机视觉任务时常见的算法和功能

    当涉及到OpenCV处理图像和计算机视觉任务时,有许多常见的具体算法和功能。以下是一些更具体的细分: 图像处理算法: 图像去噪 :包括均值去噪、高斯去噪、中值滤波等,用于减少图像中的噪声。 直方图均衡化 :用于增强图像的对比度,特别适用于低对比度图像。 边缘

    2024年02月11日
    浏览(31)
  • 基于 OpenCV 的车辆变道检测,计算机视觉+图像处理技术

    本期教程我们将和小伙伴们一起研究如何使用计算机视觉和图像处理技术来检测汽车在行驶中时汽车是否在改变车道!大家一定听说过使用 OpenCV 的 haar 级联文件可以检测到面部、眼睛等,但是如果目标是汽车,公共汽车呢? 01. 数据集 我们将道路上汽车的视频文件用作数据

    2024年01月25日
    浏览(50)
  • 基于计算机视觉,深度学习、机器学习,OpenCV,图像分割,目标检测卷积神经网络计算机毕业设计选题题目大全选题指导

    随着深度学习、机器学习和神经网络技术的快速发展,计算机视觉领域的应用变得越来越广泛和有趣。本毕业设计旨在探索这一领域的前沿技术,将深度学习模型、神经网络架构、OpenCV图像处理工具,以及卷积神经网络(CNN)的强大能力结合起来,以解决实际图像处理问题。

    2024年02月08日
    浏览(49)
  • 计算机视觉项目实战-基于特征点匹配的图像拼接

    😊😊😊 欢迎来到本博客 😊😊😊 本次博客内容将继续讲解关于OpenCV的相关知识 🎉 作者简介 : ⭐️⭐️⭐️ 目前计算机研究生在读。主要研究方向是人工智能和群智能算法方向。目前熟悉深度学习(keras、pytorch、yolo),python网页爬虫、机器学习、计算机视觉(OpenCV)、

    2024年02月02日
    浏览(35)
  • 【计算机视觉—python 】 图像处理入门教程 —— 图像属性、像素编辑、创建与复制、裁剪与拼接【 openCV 学习笔记 005 to 010 and 255】

    OpenCV中读取图像文件后的数据结构符合Numpy的ndarray多维数组结构,因此 ndarray 数组的属性和操作方法可用于图像处理的一些操作。数据结构如下图所示: img.ndim:查看代表图像的维度。彩色图像的维数为3,灰度图像的维度为2。 img.shape:查看图像的形状,代表矩阵的行数(高

    2024年01月19日
    浏览(44)
  • 【OpenCV】OpenCV:计算机视觉的强大工具库

    摘要   OpenCV是一个广泛应用于计算机视觉领域的开源工具库,为开发者提供了丰富的图像处理和计算机视觉算法。本文将介绍OpenCV的功能和应用领域,并探讨它在实践中的重要性和前景。 📕作者简介: 热爱跑步的恒川 ,致力于C/C++、Java、Python等多编程语言,热爱跑步,

    2024年02月03日
    浏览(35)
  • 计算机视觉:OpenCV相机标定

    针孔照相机模型是一种经典的相机模型,它将相机视为一个针孔,将场景中的点投影到成像平面上。在这个模型中,相机的 内参和外参 描述了相机的几何形状和相机的姿态。 相机的 内参矩阵 描述了相机的内部几何形状,包括相机的焦距、像素尺寸和像素坐标原点。相机的

    2024年01月19日
    浏览(47)
  • 计算机视觉(OpenCV+TensorFlow)

    本系列文章是OpenCV系列文章的第三篇,仍然跟随上篇内容主要聚焦于图像的一些操作 在通常情况下我们使用大小恒定的图像。但在某些情况下,我们需要使用不同分辨率的同幅图像,例如,在搜索图像中的某些内容比如脸部信息时,并不确定该内容在图像中占据的大小。这种

    2024年02月05日
    浏览(33)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包