OpenCV模板匹配matchTemplate的实现

我会详细讲解 “OpenCV模板匹配matchTemplate的实现”的完整攻略,下面是具体的步骤:

1. 准备工作

首先,我们需要引入OpenCV库,并导入需要的头文件。在C++代码中,我们可以使用以下代码实现引入:

#include <opencv2/opencv.hpp>
using namespace cv;

2. 读取图像

我们需要先读取需要进行模板匹配的原始图像和模板图像,并对其进行灰度转换。在读取图像的过程中,我们可以使用以下代码:

//读取原始图像和模板图像
Mat img = imread("原始图像.jpg");
Mat tpl = imread("模板图像.jpg");
//将图像转为灰度图像
Mat img_gray, tpl_gray;
cvtColor(img, img_gray, COLOR_BGR2GRAY);
cvtColor(tpl, tpl_gray, COLOR_BGR2GRAY);

3. 执行模板匹配

在将图像转为灰度图像的基础上,我们可以使用matchTemplate()函数对原始图像和模板图像进行模板匹配。其函数参数如下:

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

其中,参数image、templ均为输入参数,分别为原始图像和模板图像;参数result为输出参数,用于保存匹配结果;参数method是匹配算法,如下表所示:

常数名称 意义
TM_SQDIFF 平方差匹配法
TM_SQDIFF_NORMED 归一化平方差匹配法
TM_CCOEFF 相关系数匹配法
TM_CCOEFF_NORMED 归一化相关系数匹配法
TM_CCORR 相关匹配法
TM_CCORR_NORMED 归一化相关匹配法

其中,平方差匹配法(TM_SQDIFF)一般用于基准图像较小,需要在目标图像中寻找匹配区域的情况。而相关系数匹配法(TM_CCOEFF)一般用于基准图像较大,需要在目标图像中寻找相似度最高的区域的情况。

以下代码以归一化相关系数匹配法为例:

Mat match_img; //用于保存匹配结果
matchTemplate(img_gray, tpl_gray, match_img, TM_CCOEFF_NORMED);

4. 获取匹配结果

matchTemplate()函数将匹配结果保存在match_img中,接下来我们需要在match_img中寻找到相似度最高的区域。可以使用以下代码:

double min_val, max_val; //用于保存匹配值的最小值和最大值
Point min_loc, max_loc; //用于保存匹配值的最小位置和最大位置
minMaxLoc(match_img, &min_val, &max_val, &min_loc, &max_loc); //求得最大匹配值的位置

5. 显示结果

最后,将匹配结果显示出来。可以使用以下代码:

//在原始图像中,标出匹配的区域
rectangle(img, max_loc, Point(max_loc.x + tpl.cols, max_loc.y + tpl.rows), Scalar(0,0,255), 2, 8, 0);
//显示匹配结果
imshow("Match result", img);
waitKey(0);

至此,我们就完成了OpenCV模板匹配matchTemplate的实现过程。以下是两个可供参考的示例:

示例1:基于平方差匹配的模板匹配

#include <opencv2/opencv.hpp>
using namespace cv;

int main()
{
    //读取原始图像和模板图像
    Mat img = imread("original.jpg");
    Mat tpl = imread("template.jpg");
    //将图像转为灰度图像
    Mat img_gray, tpl_gray;
    cvtColor(img, img_gray, COLOR_BGR2GRAY);
    cvtColor(tpl, tpl_gray, COLOR_BGR2GRAY);

    //执行模板匹配
    Mat match_img;
    matchTemplate(img_gray, tpl_gray, match_img, TM_SQDIFF);

    //获取匹配结果
    double min_val, max_val;
    Point min_loc, max_loc;
    minMaxLoc(match_img, &min_val, &max_val, &min_loc, &max_loc);

    //在原始图像中,标出匹配的区域
    rectangle(img, min_loc, Point(min_loc.x + tpl.cols, min_loc.y + tpl.rows), Scalar(0,0,255), 2, 8, 0);

    //显示匹配结果
    imshow("Match result", img);
    waitKey(0);
    return 0;
}

示例2:基于相关系数匹配的模板匹配

#include <opencv2/opencv.hpp>
using namespace cv;

int main()
{
    //读取原始图像和模板图像
    Mat img = imread("original.jpg");
    Mat tpl = imread("template.jpg");
    //将图像转为灰度图像
    Mat img_gray, tpl_gray;
    cvtColor(img, img_gray, COLOR_BGR2GRAY);
    cvtColor(tpl, tpl_gray, COLOR_BGR2GRAY);

    //执行模板匹配
    Mat match_img;
    matchTemplate(img_gray, tpl_gray, match_img, TM_CCOEFF_NORMED);

    //获取匹配结果
    double min_val, max_val;
    Point min_loc, max_loc;
    minMaxLoc(match_img, &min_val, &max_val, &min_loc, &max_loc);

    //在原始图像中,标出匹配的区域
    rectangle(img, max_loc, Point(max_loc.x + tpl.cols, max_loc.y + tpl.rows), Scalar(0,0,255), 2, 8, 0);

    //显示匹配结果
    imshow("Match result", img);
    waitKey(0);
    return 0;
}

希望以上讲解能够对你有所帮助。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:OpenCV模板匹配matchTemplate的实现 - Python技术站

(0)
上一篇 2023年5月24日
下一篇 2023年5月24日

相关文章

  • Nginx配置优化详解

    下面我将详细讲解“Nginx配置优化详解”的完整攻略。 Nginx配置优化详解 1. 什么是Nginx? Nginx是一款高性能的Web服务器,常被用于反向代理、负载均衡、HTTP缓存等等,具有高并发、高可靠、低资源占用等优点,目前已经成为互联网行业中非常流行的Web服务器。 2. Nginx性能优化 2.1 Nginx配置文件优化 确定worker_pro…

    人工智能概览 2023年5月25日
    00
  • Python 就业方面的选择与应用分析

    Python 就业方面的选择与应用分析 Python是一种高级、解释性、面向对象的编程语言,具有简单、易学、易读的特点。随着大数据、人工智能等技术的兴起,Python已经成为了一门非常热门的编程语言。在接下来的内容中,我们将从Python就业选择和应用两个方面做出详细分析。 Python 就业选择分析 在选择Python作为就业方向时,需要了解以下几个方面:…

    人工智能概览 2023年5月25日
    00
  • 面试百度、阿里、腾讯,这134道Java面试题你会多少

    题目详细介绍 该篇面试攻略是介绍了一份 Java 面试题目清单,包含百度、阿里、腾讯等公司经典面试题目,涵盖了 Java 基础知识、JVM、多线程、并发编程、数据库等知识点,总共 134 道题目。这份面试题目清单可以帮助 Java 初/中级开发人员提升自己的知识储备,并在面试中更好地展现自己的技能。 攻略介绍 阅读清单 首先,需要认真研读该份面试题目清单,并…

    人工智能概览 2023年5月25日
    00
  • Node.js对MongoDB数据库实现模糊查询的方法

    以下是“Node.js对MongoDB数据库实现模糊查询的方法”的完整攻略。 前置知识 在继续了解如何在Node.js中实现MongoDB数据库的模糊查询前,需要具备以下前置知识: Node.js基础知识; MongoDB数据库基础知识; Node.js中使用MongoDB数据库的基础知识。 如果您还不熟悉以上内容,在进行本文攻略前,请先自学这些基础知识。 …

    人工智能概论 2023年5月25日
    00
  • Spring Boot 3.0升级指南

    针对“Spring Boot 3.0升级指南”的完整攻略,我们可以分以下几个部分来讲解。 一、背景介绍 Spring Boot 是一个非常流行的 Java Web 应用程序的开发框架。随着版本的不断更新,也带来了新的变化和优化。其中,Spring Boot 3.0 版本是最新的开发版本,与之前的版本相比,主要优化了框架的性能和扩展性,并且增加了新的功能和特性…

    人工智能概览 2023年5月25日
    00
  • Pycharm及python安装详细教程(图解)

    下面是Pycharm及Python安装详细教程的完整攻略: Pycharm及Python安装详细教程(图解) 1.下载Python安装包 在Python官网下载对应系统的安装包,建议选择最新的稳定版本进行下载。 2.安装Python 双击下载的安装包,按照步骤进行安装。安装过程中注意勾选“Add Python to PATH”选项,这样可以方便后面在命令行中…

    人工智能概览 2023年5月25日
    00
  • Python+OpenCV实现阈值分割的方法详解

    Python+OpenCV实现阈值分割的方法详解 在使用计算机视觉进行图像处理时,阈值分割是一种常见的方法,其作用是将图像分割成多个区域,并根据像素的亮度值将像素分组到不同的区域中。在本文中,我们将介绍Python和OpenCV库实现阈值分割的方法。 一、基础知识 1.1 阈值分割 阈值分割是指将图像像素按照亮度值进行分类,分为两个或多个不同的像素组。阈值分…

    人工智能概论 2023年5月24日
    00
  • 一文带你了解微服务架构中的”发件箱模式”

    一文带你了解微服务架构中的“发件箱模式” 什么是“发件箱模式” 在微服务架构中,通常使用异步消息作为不同服务之间的通信方式。而“发件箱模式”是其中一种常用的异步消息通信方式。 “发件箱模式”即将消息发送到一个消息队列(比如Kafka),然后由消息队列异步地将消息推送给接受方服务。发送方不用等待接收方处理完消息才能进行下一步操作,而是直接返回。这样可以提高整个…

    人工智能概览 2023年5月25日
    00
合作推广
合作推广
分享本页
返回顶部