1单匹配:

测试图片:

 

code:

  1. #include <opencv\cv.h>
  2. #include <opencv\highgui.h>
  3. #include <opencv\cxcore.h>
  4. #include <stdlib.h>
  5. #include <stdio.h>
  6. /*
  7. 模板匹配法 --图片查找
  8. 滑动窗口的原理
  9. 用等大小的模板窗口在范围中进行滑动 然后查找匹配
  10. */
  11. int main(int argc, char* argv[]){
  12. IplImage*src,*templat,*result,*show;
  13. int srcW,templatW,srcH,templatH,resultW,resultH;
  14. //加载源图像
  15. src = cvLoadImage("C:\\Users\\zxl\\Desktop\\4.png" , CV_LOAD_IMAGE_GRAYSCALE);
  16. //用于显示结果
  17. show = cvLoadImage("C:\\Users\\zxl\\Desktop\\4.png");
  18. //加载模板图像
  19. templat = cvLoadImage("C:\\Users\\zxl\\Desktop\\1.png" , CV_LOAD_IMAGE_GRAYSCALE);
  20. if(!src || !templat){
  21. printf("打开图片失败");
  22. return 0;
  23. }
  24. srcW = src->width;
  25. srcH = src->height;
  26. templatW = templat->width;
  27. templatH = templat->height;
  28. if(srcW<templatW || srcH<templatH){
  29. printf("模板不能比原图小");
  30. return 0;
  31. }
  32. //计算结果矩阵的大小
  33. resultW = srcW - templatW + 1;
  34. resultH = srcH - templatH + 1;
  35. //创建存放结果的空间
  36. result = cvCreateImage(cvSize(resultW,resultH),32,1);
  37. double minVal,maxVal;
  38. CvPoint minLoc,maxLoc;
  39. //调用模板匹配函数
  40. cvMatchTemplate(src,templat,result,CV_TM_SQDIFF);
  41. //查找最相似的值及其所在坐标
  42. cvMinMaxLoc(result,&minVal,&maxVal,&minLoc,&maxLoc,NULL);
  43. printf("minVal %f maxVal %f\n ",minVal,maxVal);
  44. //绘制结果
  45. cvRectangle(show,minLoc,cvPoint(minLoc.x+templat->width,minLoc.y+templat->height),CV_RGB(0,255,0),1);
  46. //显示结果
  47. cvNamedWindow("show");
  48. cvNamedWindow("tem");
  49. cvShowImage("show",show);
  50. cvShowImage("tem" , templat);
  51. cvWaitKey(0);
  52. return 0;
  53. }

2多匹配:

code:

  1. #include <opencv\cv.h>
  2. #include <opencv\highgui.h>
  3. #include <opencv\cxcore.h>
  4. #include <stdlib.h>
  5. #include <stdio.h>
  6. /*
  7. 模板匹配法 --图片查找
  8. 滑动窗口的原理
  9. 用等大小的模板窗口在范围中进行滑动 然后查找匹配
  10. */
  11. CvPoint getNextMinLoc(IplImage* result , int templatWidth,int templatHeight,double maxValIn , CvPoint lastLoc){
  12. int y,x;
  13. int startY,startX,endY,endX;
  14. //计算大矩形的左上角坐标
  15. startY = lastLoc.y - templatHeight;
  16. startX = lastLoc.x - templatWidth;
  17. //计算大矩形的右下角的坐标 大矩形的定义 可以看视频的演示
  18. endY = lastLoc.y + templatHeight;
  19. endX = lastLoc.x + templatWidth;
  20. //不允许矩形越界
  21. startY = startY < 0 ? 0 : startY;
  22. startX = startX < 0 ? 0 : startX;
  23. endY = endY > result->height-1 ? result->height-1 : endY;
  24. endX = endX > result->width - 1 ? result->width - 1 : endX;
  25. //将大矩形内部 赋值为最大值 使得 以后找的最小值 不会位于该区域 避免找到重叠的目标
  26. for(y=startY;y<endY;y++){
  27. for(x=startX;x<endX;x++){
  28. cvSetReal2D(result,y,x,maxValIn);
  29. }
  30. }
  31. double minVal,maxVal;
  32. CvPoint minLoc,maxLoc;
  33. //查找result中的最小值 及其所在坐标
  34. cvMinMaxLoc(result,&minVal,&maxVal,&minLoc,&maxLoc,NULL);
  35. return minLoc;
  36. }
  37. int main(int argc, char* argv[]){
  38. IplImage*src,*templat,*result,*show;
  39. int srcW,templatW,srcH,templatH,resultW,resultH;
  40. //加载源图像
  41. src = cvLoadImage("C:\\Users\\zxl\\Desktop\\4.png" , CV_LOAD_IMAGE_GRAYSCALE);
  42. //加载用于显示结果的图像
  43. show = cvLoadImage("C:\\Users\\zxl\\Desktop\\4.png");
  44. //加载模板图像
  45. templat = cvLoadImage("C:\\Users\\zxl\\Desktop\\1.png" , CV_LOAD_IMAGE_GRAYSCALE);
  46. if(!src || !templat){
  47. printf("打开图片失败");
  48. return 0;
  49. }
  50. srcW = src->width;
  51. srcH = src->height;
  52. templatW = templat->width;
  53. templatH = templat->height;
  54. if(srcW<templatW || srcH<templatH){
  55. printf("模板不能比原图小");
  56. return 0;
  57. }
  58. //计算结果矩阵的宽度和高度
  59. resultW = srcW - templatW + 1;
  60. resultH = srcH - templatH + 1;
  61. //创建存放结果的空间
  62. result = cvCreateImage(cvSize(resultW,resultH),32,1);
  63. double minVal,maxVal;
  64. CvPoint minLoc,maxLoc;
  65. //进行模板匹配
  66. cvMatchTemplate(src,templat,result,CV_TM_SQDIFF);
  67. //第一次查找最小值 即找到第一个最像的目标
  68. cvMinMaxLoc(result,&minVal,&maxVal,&minLoc,&maxLoc,NULL);
  69. //绘制第一个查找结果到图像上
  70. cvRectangle(show,minLoc,cvPoint(minLoc.x+templat->width,minLoc.y+templat->height),CV_RGB(0,255,0),1);
  71. //查找第二个结果
  72. minLoc = getNextMinLoc( result , templat->width,templat->height, maxVal , minLoc);
  73. //绘制第二个结果
  74. cvRectangle(show,minLoc,cvPoint(minLoc.x+templat->width,minLoc.y+templat->height),CV_RGB(0,255,0),1);
  75. //显示结果
  76. cvNamedWindow("show");
  77. cvShowImage("show",show);
  78. cvWaitKey(0);
  79. return 0;
  80. }

转载自:
博主:a771948524
博文地址:https://blog.csdn.net/zxlstudio/article/details/10025847
来源:CSDN

OpenCV--模板匹配与滑动窗口(单匹配或多匹配)相关推荐

  1. opencv 模板匹配(cvMatchTemplate)

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

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

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

  3. java通过模板匹配html,OpenCV模板匹配

    目标 在本教程中,您将学习如何:使用OpenCV功能matchTemplate()来搜索图像补丁和输入图像之间的匹配 使用OpenCV函数minMaxLoc()来查找给定数组中的最大值和最小值(以及它 ...

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

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

  5. OpenCV模板匹配Template Matching

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

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

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

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

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

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

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

  9. 【CF 1195】Basketball Exercise/Submarine in the Rybinsk Sea (hard edition)/OpenStreetMap+二维单调队列滑动窗口模板

    寡人认为C,E都是比较板的题 butD2也太ex了,大大是被那个mod精给弄疯了,我mod了那么多次还是炸了longlong orz 文章目录 二维单调队列模板 C:Basketball Exerci ...

最新文章

  1. Go 分布式学习利器(18)-- Go并发编程之lock+WaitGroup实现线程安全
  2. 即时编译和提前编译_即时编译说明
  3. Silverlight 参考:KeyEventArgs.Handled 属性
  4. 图像修复中的TV模型
  5. resnet50网络结构_AAAI2020 | 利用网络结构关系加速NAS+Layer
  6. c语言的44种运算符,C语言重要知识点总结【9】:C语言运算符(详解)
  7. zabbix3.4配置钉钉机器人报警
  8. 用.net中的SqlBulkCopy类批量复制数据 (转载)
  9. markdownpad2渲染组件出错——Awesomium sdk组件下载
  10. 微信-支付宝---人脸识别认证
  11. 未来房价涨or跌?大数据告诉你
  12. 8个免费高清无版权图片网站--设计必备
  13. 如何在win10下安装IMSL6.0
  14. Vue指令之条件渲染
  15. linux使用yum安装ruby,yum安装ruby_安装 Ruby
  16. 浅谈Android性能优化方案
  17. 一文带你深入浅出C语言数据
  18. 哈尔滨工业大学雨课堂(学堂在线)自动观看mooc
  19. 汇编语言---算术运算指令
  20. Linux CentOS7 同步时间的两种方式(npt 或者 rdate)

热门文章

  1. Java的class文件批量反编译成Java文件
  2. Spring Boot 面试问题
  3. ElasticSearch入门教程--安装
  4. Solaris 中的环境变量
  5. 最全免费C语言之苏小红版《高级语言程序设计》第七章188页小学计算机辅助教学系统程序设计
  6. #define c# 报错_c语言中#define的用法
  7. 【Python】 注释
  8. C#LeetCode刷题之#121-买卖股票的最佳时机(Best Time to Buy and Sell Stock)
  9. 学习一下spring-cloud-function中官方修复的一个问题
  10. vue.js tutorial for beginner [Is it possible for us to learn vue.js in a minute?]