OpenCV目标检测(1)模板匹配函数matchTemplate()的使用

news2024/11/14 22:08:26
  • 操作系统:ubuntu22.04
  • OpenCV版本:OpenCV4.9
  • IDE:Visual Studio Code
  • 编程语言:C++11

算法描述

将一个模板与重叠的图像区域进行比较。
该函数在图像中滑动,使用指定的方法将大小为 w × h w \times h w×h的重叠块与模板 templ 进行比较,并将比较结果存储在 result 中。TemplateMatchModes 描述了可用比较方法的公式( I I I表示图像, T T T 表示模板, R R R 表示结果, M M M 表示可选的掩码)。求和是在模板和/或图像块上进行的: x ′ = 0... w − 1 , y ′ = 0... h − 1 x' = 0...w-1, y' = 0...h-1 x=0...w1,y=0...h1

函数完成比较后,可以使用 minMaxLoc 函数找到最佳匹配作为全局最小值(当使用 TM_SQDIFF 时)或最大值(当使用 TM_CCORR 或 TM_CCOEFF 时)。在彩色图像的情况下,模板在分子中的求和和分母中的每次求和都是在所有通道上进行的,并且每个通道使用单独的均值。也就是说,该函数可以接受一个彩色模板和一个彩色图像。结果仍然是一个单通道图像,这更容易分析。

OpenCV 中的 matchTemplate() 函数用于模板匹配,它可以在一幅图像中搜索另一个小图像(称为模板)的位置。该函数比较模板图像和输入图像中的所有位置,并返回一个灰度图,其中每个像素值表示模板与输入图像相应位置的匹配程度。

函数原型

void cv::matchTemplate	
(
	InputArray 	image,
	InputArray 	templ,
	OutputArray 	result,
	int 	method,
	InputArray 	mask = noArray() 
)		

参数

  • 参数image:正在其中进行搜索的图像。它必须是8位或32位浮点型。

  • 参数templ:被搜索的模板。它必须不大于源图像,并且具有相同的数据类型。

  • 参数result:比较结果的地图。它必须是单通道32位浮点型。如果 image 是 W × H W×H W×H,而 templ 是
    w × h w \times h w×h,那么 result 是 ( W − w + 1 ) × ( H − h + 1 ) (W-w+1) \times (H-h+1) (Ww+1)×(Hh+1)

  • 参数method:指定比较方法的参数,参见 TemplateMatchModes。

  • 参数mask:可选的掩码。它必须与 templ 具有相同的大小。它要么具有与模板相同的通道数,要么只有一个通道,后者则用于所有模板和图像通道。如果数据类型是 CV_8U,则掩码被视为二值掩码,这意味着只有掩码非零的元素被使用,并且它们的值保持不变,与实际掩码值无关(权重等于1)。对于数据类型 CV_32F,掩码值被用作权重。具体的公式在 TemplateMatchModes 中有记录。

代码示例


#include <iostream>
#include <opencv2/opencv.hpp>

int main( int argc, char** argv )
{
    cv::Mat img   = cv::imread( "/media/dingxin/data/study/OpenCV/sources/images/qiu.jpg", cv::IMREAD_GRAYSCALE );
    cv::Mat templ = cv::imread( "/media/dingxin/data/study/OpenCV/sources/images/qiu2.png", cv::IMREAD_GRAYSCALE );

    if ( img.empty() || templ.empty() )
    {
        std::cout << "Could not open or find the images!" << std::endl;
        return -1;
    }

    // 创建结果矩阵
    cv::Mat result;
    // 使用归一化互相关匹配法
    int method = cv::TM_SQDIFF_NORMED; 
    cv::matchTemplate( img, templ, result, cv::TM_SQDIFF );

    // 查找最大最小值及其位置
    // 查找最大最小值及其位置
    double minVal, maxVal;
    cv::Point minLoc, maxLoc;
    cv::Point matchLoc;
    cv::minMaxLoc( result, &minVal, &maxVal, &minLoc, &maxLoc, cv::Mat() );

    // 根据所选的方法,找到最佳匹配位置
    
    if ( cv::TM_SQDIFF == method || cv::TM_SQDIFF_NORMED == method )
    {
        matchLoc = minLoc;  // 对于平方差匹配方法,使用最小值位置
    }
    else
    {
        matchLoc = maxLoc;  // 对于其他匹配方法,使用最大值位置
    }

    // 绘制矩形框标记匹配区域
    cv::Rect matchRect( matchLoc.x, matchLoc.y, templ.cols, templ.rows );
    cv::rectangle( img, matchRect, cv::Scalar::all( 0 ), 2, 8, 0 );

    // 显示结果
    cv::imshow( "Image", img );
    cv::imshow( "Result", result );
    cv::waitKey( 0 );

    return 0;
}

运行结果

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2160499.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

安全运维教程(非常详细)从零基础入门到精通,看完这一篇就够了_网络运维手册

一、安全运维-网络 1、IP地址相关 IP地址属于网络层地址&#xff0c;用于标识网络中的节点设备。 IP地址由32bit构成&#xff0c;每8bit一组&#xff0c;共占用4个字节。 IP地址由两部分组成&#xff0c;网络位和主机位。 IP地址分类&#xff1a; 类别网络位子网掩码私有地…

基于单片机的智能校园照明系统

由于校园用电量较大&#xff0c;本设计可以根据实际环境情况的改变&#xff0c;实现实时照明的控制。本设计以单片机芯片为控制芯片&#xff0c;热释电传感器采集教室中学生出入的信息&#xff0c;并把信息传递给单片机芯片&#xff0c;单片机芯片根据传感器传递过来的信息来控…

004_动手实现MLP(pytorch)

import torch from torch import nn from torch.nn import init import numpy as np import sys import d2lzh_pytorch as d2l # 1.数据预处理 mnist_train torchvision.datasets.FashionMNIST(root/Users/w/PycharmProjects/DeepLearning_with_LiMu/datasets/FashionMnist, t…

水印与标志检测系统源码分享

水印与标志检测检测系统源码分享 [一条龙教学YOLOV8标注好的数据集一键训练_70全套改进创新点发刊_Web前端展示] 1.研究背景与意义 项目参考AAAI Association for the Advancement of Artificial Intelligence 项目来源AACV Association for the Advancement of Computer V…

深度解读数字化转型实施中的常见挑战与解决方案

为何深入理解数字化转型中的挑战至关重要&#xff1f; 数字化转型不仅仅是技术升级的过程&#xff0c;更是企业在面对市场变化、客户需求以及内部效率提升等多方面压力时&#xff0c;进行的系统性变革。然而&#xff0c;数字化转型并非一蹴而就&#xff0c;且在实际实施过程中…

app store预览和截屏最新要求6.9寸截屏,没真机的解决方案

IOS又升级了&#xff0c;最新的iphone 16&#xff0c;新出的iphone 16 pro max是6.9英寸的。 而app store的上架流程也随机更新了&#xff0c;不再需要之前的5.5寸屏截图&#xff0c;改为需要6.9寸屏的截图了 5.5寸那些老古董终于退出历史舞台 但是问题来了&#xff0c;现在…

电源设计的艺术:从底层逻辑到工程实践

在电子工程的世界里&#xff0c;电源设计是核心中的核心。它不仅是电子设备的能量源泉&#xff0c;更是整个系统稳定运行的基石。随着科技的不断进步&#xff0c;电源设计的要求也越来越高&#xff0c;从效率、稳定性到体积、成本&#xff0c;每一个维度都是工程师们不断追求的…

Linux相关概念和重要知识点(7)(git、冯诺依曼体系结构)

1.git &#xff08;1&#xff09;版本控制和版本控制器 当我们修改一个项目的时候&#xff0c;一般都会先留下一个备份再修改&#xff0c;并将修改的文件命名为第一次修改、第二次修改......当需要途中的任何版本&#xff0c;或是需要回退到之前的版本时&#xff0c;都能够找…

远程连接服务器时出现“这可能是由于CredSSP加密数据库修正”的错误提示的解决办法

现象&#xff1a; 当远程连接服务器时&#xff0c;有时候会出现以下提示&#xff0c;从而导致无法成功连接服务&#xff0c;如下所述&#xff1a; 原因&#xff1a; 远程桌面使用的是“凭据安全支持提供程序协议 (CredSSP) ”&#xff0c;这个协议在未修补的版本中是存在漏…

焊接缺陷检测系统源码分享

焊接缺陷检测检测系统源码分享 [一条龙教学YOLOV8标注好的数据集一键训练_70全套改进创新点发刊_Web前端展示] 1.研究背景与意义 项目参考AAAI Association for the Advancement of Artificial Intelligence 项目来源AACV Association for the Advancement of Computer Vis…

实现高效物联网通信:MQTT协议深入解析

MQTT&#xff08;Message Queuing Telemetry Transport&#xff09;是一种轻量级的消息传输协议&#xff0c;最初由IBM于1999年开发&#xff0c;目的是为了监控远程设备的传感器和嵌入式系统之间的通信。它的目标是提供一种简单、高效、可靠的消息传递机制&#xff0c;以满足低…

1.5 计算机网络的性能指标

参考&#xff1a;&#x1f4d5;深入浅出计算机网络 目录 速率 带宽 吞吐量 时延 时延带宽积 往返时间 利用率 丢包率 速率 速率是指数据的传送速率&#xff08;即每秒传送多少个比特&#xff09;&#xff0c;也称为数据率&#xff08;Data Rate&#xff09;或比特率&am…

【React与Vue】如何在页签中监听 LocalStorage 变化?这些方法你都试过吗?

在开发中&#xff0c;你是否会碰到过这样的需求&#xff1a;需要监听 LocalStorage 的变化。这在不同浏览器页签间是相对简单的&#xff0c;因为浏览器提供了内置的 storage 事件。但在同一个浏览器页签下&#xff0c;却没有直接的方式实现。今天&#xff0c;我们探讨下有几种高…

中电金信多模态鉴伪技术抵御AI造假威胁

AI换脸技术&#xff0c;属于深度伪造最常见方式之一&#xff0c;是一种利用人工智能生成逼真的虚假人脸图片或视频的技术。基于深度学习算法&#xff0c;可以将一个人的面部特征映射到另一个人的面部&#xff0c;创造出看似真实的伪造内容。近年来&#xff0c;以AI换脸为代表的…

关于Cursor使用的小白第一视角

最近看破局感觉洋哥总是提到cursor&#xff0c;感觉好火&#xff0c;所以打算学习一下怎么用Cursor&#xff0c;如果可以希望能做一个我自己的网站。 之前从来没用过Cursor。所以&#xff0c;这是一篇小白视角的Cursor使用教程。 如果你也是一个小白&#xff0c;并且对Cursor…

【Python】Spyder:科学 Python 开发环境

在数据科学和科学计算领域&#xff0c;Python 已经成为了一个不可或缺的工具。为了提高开发效率和改善编程体验&#xff0c;一个功能强大且用户友好的开发环境是必需的。Spyder&#xff08;Scientific Python Development Environment&#xff09;正是这样一个为科学计算和数据…

Redhat 7,8,9系(复刻系列) 一键部署Oracle19c rpm

Oracle19c前言 Oracle 19c 是甲骨文公司推出的一款企业级关系数据库管理系统,它带来了许多新的功能和改进,使得数据库管理更加高效、安全和可靠。以下是关于 Oracle 19c 的详细介绍: 主要新特性 多租户架构:支持多租户架构,允许多个独立的数据库实例在同一个物理服务器上…

网络PPP协议802.11协议以太网协议IPV4协议在思科模拟器的实现

1&#xff09;PPP协议 1. 选择2620系列交换机&#xff0c;添加WIC-2t模块&#xff0c;具有两个serial串行接口&#xff1b; 2.Router>enable:进入特权模式 Router#configure terminal&#xff1a;全局配置模式 Enter configuration commands, one per line. End with CNTL…

配置win10开电脑时显示可登录账号策略

有1台公用的windows10电脑&#xff0c;电脑上有N多用户&#xff0c;使用人员登录时选择相应的账号登录即可。但在某次使用脚本加固后&#xff0c;发现之前显示的用户都不能显示了。检查加固脚本&#xff0c;是脚本启用了“交互式登录&#xff1a;不显示上次登录”策略。因此&am…

基于SpringBoot+Vue的垃圾分类回收管理系统

作者&#xff1a;计算机学姐 开发技术&#xff1a;SpringBoot、SSM、Vue、MySQL、JSP、ElementUI、Python、小程序等&#xff0c;“文末源码”。 专栏推荐&#xff1a;前后端分离项目源码、SpringBoot项目源码、Vue项目源码、SSM项目源码 精品专栏&#xff1a;Java精选实战项目…