OpenCV-模板匹配cv::matchTemplate

简介: OpenCV-模板匹配cv::matchTemplate

函数原型

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


参数说明

  1. InputArray类型的image,输入图像。
  2. InputArray类型的templ,待匹配图像。
  3. OutputArray类型的result,输出匹配结果。
  4. int类型的method,匹配方法,具体介绍见下方。
  5. InputArray类型的mask,掩膜。


匹配方法介绍

      模板匹配函数中自带了6种匹配方法,其原理是以原图某点为起始点,选择模板同大小的区域进行计算,根据得到的结果选择最优的解,所以当你使用该函数时会发现,假如原图1000*1000,模板100*100,那结果图尺寸为900*900,各方法对应的公式和原理如下所示。

      1.CV_TM_SQDIFF,平方差匹配法。得到的数值越小,说明越匹配。

      2.CV_TM_SQDIFF_NORMED,归一化平方差匹配法。得到的数值越小,说明越匹配。

      3.CV_TM_CCORR,相关匹配法。得到的数值越大,说明越匹配。该方法容易受背景干扰。

      4.CV_TM_CCORR_NORMED,归一化相关匹配法。得到的数值越大,说明越匹配。该方法容易受背景干扰。


      5.CV_TM_CCOEFF,相关系数法,也是零均值互相关法,将均值减去后,再计算相关性。得到的数值越大,说明越匹配。该方法应用性较优。

      6.CV_TM_CCOEFF_NORMED,归一化相关系数法。得到的数值越大,说明越匹配。该方法应用性较优。

测试代码

#include <iostream>  
#include <opencv2\opencv.hpp>
#include <opencv2/highgui/highgui.hpp> 
using namespace cv;
using namespace std;
int main()
{
  cv::Mat src = imread("test1.jpg");
  cv::Mat sample = imread("t.png");
  // 匹配
  cv::Mat result;
  matchTemplate(src, sample, result, CV_TM_CCOEFF);
  // 归一化
  normalize(result, result, 0, 1, NORM_MINMAX, -1, Mat());
  // 获取最小值
  double minValue; double maxValue; Point minLocation; Point maxLocation;
  Point matchLocation;
  minMaxLoc(result, &minValue, &maxValue, &minLocation, &maxLocation, Mat());
  matchLocation = maxLocation;
  // 框选结果
  cv::Mat draw = src.clone();
  rectangle(draw, matchLocation, Point(matchLocation.x + sample.cols, matchLocation.y + sample.rows), Scalar(255, 0, 0), 2, 8, 0);
  imshow("src", src);
  imshow("sample", sample);
  imshow("draw", draw);
  waitKey(0);
  return 0;
}

测试效果

图1 原图

图2 待检测目标

图3 检测结果

    如果文章帮助到你了,可以点个赞让我知道,我会很快乐~加油!

相关文章
|
6月前
|
计算机视觉 Python
OpenCV多模板匹配讲解与匹配汽车实战(附Python源码)
OpenCV多模板匹配讲解与匹配汽车实战(附Python源码)
167 0
OpenCV多模板匹配讲解与匹配汽车实战(附Python源码)
|
4月前
|
机器学习/深度学习 人工智能 算法
Python在计算机视觉(CV)中扮演重要角色,得益于其丰富的库如OpenCV、Pillow和Scikit-image。
【7月更文挑战第5天】Python在计算机视觉(CV)中扮演重要角色,得益于其丰富的库如OpenCV、Pillow和Scikit-image。CV涉及图像处理、模式识别和机器学习,用于图像理解和生成。Python的跨平台特性和活跃社区使其成为CV的理想工具。基本流程包括图像获取、预处理、特征提取、分类识别及图像生成。例如,面部识别通过预处理图像,使用如`cv2.CascadeClassifier`进行检测;物体检测类似,但需适应不同目标;图像生成则利用GAN创造新图像。
68 4
|
3月前
|
计算机视觉 索引
OpenCV读取视频失败<无可用信息,未为 opencv_world453.dll 加载任何符号> cv::VideoCapture
本文介绍了解决OpenCV读取视频失败的错误,指出问题通常由视频路径错误或摄像头索引错误导致,并提供了相应的解决方法。
OpenCV读取视频失败<无可用信息,未为 opencv_world453.dll 加载任何符号> cv::VideoCapture
|
3月前
|
计算机视觉
OpenCV 图像类型标识符 CV_<bit_depth><S|U|F>C<number_of_channels>
OpenCV 图像类型标识符 CV_<bit_depth><S|U|F>C<number_of_channels>
38 0
|
5月前
|
运维 算法 计算机视觉
【Qt&OpenCV 图像的模板匹配 matchTemplate/minMaxLoc】
【Qt&OpenCV 图像的模板匹配 matchTemplate/minMaxLoc】
77 1
|
6月前
|
计算机视觉
OpenCV 模板匹配
OpenCV 模板匹配
60 1
|
6月前
|
算法 API 计算机视觉
【OpenCV】- 模板匹配(浩瀚星空只为寻找那一抹明月)
【OpenCV】- 模板匹配(浩瀚星空只为寻找那一抹明月)
|
6月前
|
计算机视觉
OpenCV报错: cv::Exception,位于内存位置 0x00000078226FEE58 处。
OpenCV报错: cv::Exception,位于内存位置 0x00000078226FEE58 处。
|
6月前
|
存储 计算机视觉 C++
Opencv (C++)系列学习---模板匹配
Opencv (C++)系列学习---模板匹配
116 0
|
6月前
|
计算机视觉
基于opencv的Makefile模板
基于opencv的Makefile模板