1.模板匹配介绍

  • 模板匹配就是在整个图像区域发现与给定子图像匹配的小块区域;
  • 模板匹配需要首先给定一个模板图像;
  • 另外需要一张待检测的图像;
  • 工作方法:在待检测图像上,从左到右,从上到下计算模板图像与重叠子图像的匹配度,匹配程度越大,两者相同的可能性越大。

2.API

matchTemplate

matchTemplate(InputArray image,  //原图像,必须是8-bit或者32-bit浮点数图像InputArray templ, //模板图像,类型与输入图像一致OutputArray result,  //输出结果,必须是单通道32位浮点数,假设原图像W*H,模板图像w*h,结果必须为W-w+1,H-h+1的大小int method,            //使用的匹配方法InputArray mask=noArray())
enum cv::TemplateMatchModes {cv::TM_SQDIFF = 0,cv::TM_SQDIFF_NORMED = 1,cv::TM_CCORR = 2,cv::TM_CCORR_NORMED = 3,cv::TM_CCOEFF = 4,cv::TM_CCOEFF_NORMED = 5
}minMaxLoc(src, minVal, maxVal, minLoc, maxLoc, mask)
/*
在一个数组中找到全局最小值和全局最大值
minMaxLoc函数找到最小值和最大值元素值以及它们的位置。
*/

3.实例代码

#include <opencv2/opencv.hpp>
#include <iostream>#include <math.h>
using namespace std;
using namespace cv;Mat src, temp, dst;
int match_method = TM_SQDIFF;
int max_track = 5;
const char* INPUT_T = "input image";
const char* OUTPUT_T = "result image";
const char* match_t = "template match-demo";
void Match_Demo(int, void*);
int main(int argc, char** argv) {// 待检测图像src = imread("D:/vcprojects/images/flower.png");// 模板图像temp = imread("D:/vcprojects/images/t2.png");if (src.empty() || temp.empty()) {printf("could not load image...\n");return -1;}namedWindow(INPUT_T, CV_WINDOW_AUTOSIZE);namedWindow(OUTPUT_T, CV_WINDOW_NORMAL);namedWindow(match_t, CV_WINDOW_AUTOSIZE);imshow(INPUT_T, temp);const char* trackbar_title = "Match Algo Type:";createTrackbar(trackbar_title, OUTPUT_T, &match_method, max_track, Match_Demo);Match_Demo(0, 0);waitKey(0);return 0;
}void Match_Demo(int, void*) {int width = src.cols - temp.cols + 1;int height = src.rows - temp.rows + 1;Mat result(width, height, CV_32FC1);matchTemplate(src, temp, result, match_method, Mat());normalize(result, result, 0, 1, NORM_MINMAX, -1, Mat());Point minLoc;Point maxLoc;double min, max;src.copyTo(dst);Point temLoc;minMaxLoc(result, &min, &max, &minLoc, &maxLoc, Mat());if (match_method == TM_SQDIFF || match_method == TM_SQDIFF_NORMED) {temLoc = minLoc;} else {temLoc = maxLoc;}// 绘制矩形rectangle(dst, Rect(temLoc.x, temLoc.y, temp.cols, temp.rows), Scalar(0, 0, 255), 2, 8);rectangle(result, Rect(temLoc.x, temLoc.y, temp.cols, temp.rows), Scalar(0, 0, 255), 2, 8);imshow(OUTPUT_T, result);imshow(match_t, dst);
}

C++ opencv模板匹配相关推荐

  1. OpenCV模板匹配Template Matching

    OpenCV模板匹配Template Matching 模板匹配Template Matching 目标 理论 什么是模板匹配? OpenCV提供哪些匹配方法? 代码 解释 结果 模板匹配Templa ...

  2. 图像匹配与OpenCV模板匹配

    介绍 (Introduction) As a data scientist at VATBox, I've mainly worked on projects which at their core ...

  3. opencv 模板匹配(cvMatchTemplate)

    opencv 模板匹配(cvMatchTemplate) 模板匹配是通过在输入图像上滑动模板图像块对实际的图像块和输入图像进行匹配,并且可以利用函数cvMinMaxLoc()找到最佳匹配的位置.例如在 ...

  4. OpenCV模板匹配函数:matchTemplate()介绍

    OpenCV模板匹配函数:matchTemplate()介绍

  5. OpenCV模板匹配识别图片中的数字

    OpenCV模板匹配识别图片中的数字 前言 本博客主要实现利用OpenCV的模板匹配识别图像中的数字,然后把识别出来的数字输出到txt文件中,如果识别失败则输出"读取失败". 操作 ...

  6. python opencv模板匹配多目标_基于opencv的多目标模板匹配

    利用opencv进行多目标模板匹配,只要是利用其matchTemplate函数,但在多目标(这里是讨论目标图片中不同大小模板的匹配),以下贴出代码和图片,供大家参考: #include #includ ...

  7. opencv 模板匹配_详细剖析模板匹配

    点击上方"新机器视觉",选择加"星标"或"置顶" 重磅干货,第一时间送达 模板匹配介绍 我们需要2幅图像: 原图像 (I): 在这幅图像里, ...

  8. opencv 模板匹配,在图像中寻找物体

    使用模板匹配在图像中寻找物体 模板匹配 模板匹配就是用来在大图中找小图,也就是说在一副图像中寻找另外一张模板图像的位置: opencv中用 cv.matchTemplate() 实现模板匹配. 模板匹 ...

  9. OpenCV 模板匹配去重

    根据不同匹配结果间的距离远近进行去重操作. 文章目录 检测效果 源码 代码难点 检测效果 源码 import cv2 import numpy as np import timedef get_rea ...

  10. Java + OpenCV 模板匹配

    何为模板匹配 模板匹配就是在指定模板图片中,在模板区域内找寻与待匹配图片中最相似的.通过不断滑动模板图片,计算其与待匹配图片区域的匹配度,将匹配度最高区域视为最终匹配结果. 实现方法 Imgproc. ...

最新文章

  1. 控制反转(IoC) ? 工厂模式?
  2. leetcode 756. Pyramid Transition Matrix | 756. 金字塔转换矩阵(BFS)
  3. 两个链接合并_如何找到两个链接列表的合并点
  4. java给图片坐标描点,记录一下, canvas实现获取图片每个坐标点,以描点方式渲染图片...
  5. 【工程项目经验】VMware The path is not a valid path to the 3.10.0-229.el7.x86_64
  6. sql计数_SQL计数区分功能概述
  7. Git和Github代码管理实践
  8. 详解如何基于Arduino兼容板Digispark实现虚拟键盘与鼠标
  9. 【图论】Prim算法求最小生成树详解
  10. SQL2014 MySQL_SQL Server 2014 Express 官方免费版下载
  11. sin的傅里叶变换公式_傅里叶变换的由来及复数下的傅里叶变换公式证明
  12. 区块链性能测试工具使用教程
  13. 免费使用微软Azure进行文字转语音的三种方法!最自然接近人声的机器配音技术。
  14. 使用谷歌浏览器chrome截取长图
  15. 初探MySQL的语句之二
  16. 查询指定时间范围内的订单信息
  17. android 日语输入法,Android日语输入法Simeji使用示例
  18. 蓝牙协议(bluetooth spec)
  19. 一日精通python编程_爱上Python 一日精通Python编程 [Learn Python in One Day and Learn it Well ]...
  20. 18.通过按键切换LED颜色

热门文章

  1. 无心插柳柳成荫,有心种花花不开
  2. 信号各种变换 python实现 DFT,STFT,CWT,DWT
  3. 【FastAdmin专题一】使用双表格联动实现字典管理之修改表格原始样式
  4. Codeforces-1473-G. Tiles (范德蒙德卷积+快速数论变换NTT)
  5. Confluent Platform: 正式环境安装
  6. 机器学习-最大熵模型
  7. Liquibase实践指南
  8. 史上最全阿里技术面试题目
  9. JAVA向Mysql插入亿级别数据---测评
  10. 分享 | 闲鱼靠什么支撑起万亿的交易规模?