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

using namespace std;
using namespace cv;

Mat img1, img2, img3, img4,img_result, img_gray1, img_gray2, img_gray3, img_hsv1, img_hsv2, img_hsv3;
MatND img_hist1, img_hist2, img_hist3;

char win1[] = "window1";
char win2[] = "window2";
char win3[] = "window3";
char win4[] = "window4";
char win5[] = "window5";

int threshold_value = 0;
int max_value = 255;
RNG rng(12345);

int Demo_Match_Template();
string convertToString(double d);
void Demo_Match(int,void*);

int index = 0;
int match_threshold = 20;
int max_track = 255;
int match_method = CV_TM_SQDIFF;

//模板匹配
int Demo_Match_Template()
{
  namedWindow(win1, CV_WINDOW_AUTOSIZE);
  //namedWindow(win2, CV_WINDOW_AUTOSIZE);
  namedWindow(win3, CV_WINDOW_AUTOSIZE);

  img1 = imread("D://images//1//p5.jpg");
  img2 = imread("D://images//1//p5_1.jpg");
  if (img1.empty()||img2.empty())
  {
    cout << "could not load image..." << endl;
    return 0;
  }
  //imshow(win1, img1);
  createTrackbar("Trace bar", win1, &match_threshold, max_track, Demo_Match);
  Demo_Match(0,0);
  imshow(win1, img1);
  return 0;
}

void Demo_Match(int, void*)
{
  int width = img1.cols - img2.cols + 1;
  int height = img1.rows - img2.rows + 1;
  img3 = Mat(width,height,CV_32FC1);

  matchTemplate(img1, img2, img3, match_method, Mat());
  //归一化
  normalize(img3, img3, 0, 1, NORM_MINMAX,-1,Mat());

  Point minLoc;
  Point maxLoc;
  Point tempLoc;
  double min, max;
  minMaxLoc(img3, &min, &max, &minLoc, &maxLoc, Mat());

  if (match_method==CV_TM_SQDIFF || match_method==CV_TM_SQDIFF_NORMED)
  {
    tempLoc = minLoc;
  }
  else
  {
    tempLoc = maxLoc;
  }
  img1.copyTo(img4);
  //绘制矩形
  rectangle(img4, Rect(tempLoc.x, tempLoc.y,img2.cols,img2.rows),Scalar(0,0,255),2,8);
  //rectangle(img3, Rect(tempLoc.x, tempLoc.y, img2.cols, img2.rows), Scalar(0, 0, 255), 2, 8);

  imshow(win2,img2);
  imshow(win3,img4);
}

string convertToString(double d)
{
  ostringstream os;
  if (os << d)
  {
    return os.str();
  }
  return "Invalid conversion...";
}

int main()
{
  Demo_Match_Template();

  waitKey(0);
  return 0;
}

Opencv Match Template(轮廓匹配)的更多相关文章

  1. 【OpenCV学习笔记】三十、轮廓特征属性及应用(七)—位置关系及轮廓匹配

    http://blog.csdn.net/abc8730866/article/details/69219992 轮廓特征属性及应用(七)—位置关系及轮廓匹配 1.计算点与轮廓的距离及位置关系——po ...

  2. OpenCV应用(3) 简单轮廓匹配的小例子

    具体应用 https://blog.csdn.net/kyjl888/article/details/85060883 OpenCV中提供了几个与轮廓相关的函数: findContours():从二值 ...

  3. EmguCV 轮廓匹配

    一.相关类 MCvMoments inv_sqrt_m00 m00!=0?1/sqrt(m00):0 m00  spatial moments m01, m02, m03, m10, m11 m12, ...

  4. 使用Opencv中matchTemplate模板匹配方法跟踪移动目标

    模板匹配是一种在图像中定位目标的方法,通过把输入图像在实际图像上逐像素点滑动,计算特征相似性,以此来判断当前滑块图像所在位置是目标图像的概率. 在Opencv中,模板匹配定义了6种相似性对比方式: C ...

  5. 使用Python+OpenCV进行图像模板匹配(Match Template)

    2017年9月22日 BY 蓝鲸 LEAVE A COMMENT 本篇文章介绍使用Python和OpenCV对图像进行模板匹配和识别.模板匹配是在图像中寻找和识别模板的一种简单的方法.以下是具体的步骤 ...

  6. opencv学习之路(28)、轮廓查找与绘制(七)——位置关系及轮廓匹配

    一.点与轮廓的距离及位置关系 #include "opencv2/opencv.hpp" #include <iostream> using namespace std ...

  7. OpenCV图像的轮廓的匹配

    http://blog.sina.com.cn/s/blog_67a7426a0101cxl0.html 一个跟轮廓相关的最常用到的功能是匹配两个轮廓.如果有两个轮廓,如何比较它们;或者如何比较一个轮 ...

  8. opencv:轮廓匹配

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

  9. 十一 模板匹配match template

    一.介绍 1.模板匹配 通俗讲就是以图找图,通过图中的一部分来找它在图中的位置(模板匹配就是在整个图像区域发现与给定子图像匹配的小块区域). 模板匹配是一种最原始.最基本的模式识别方法,研究某一特定对 ...

随机推荐

  1. mount: /dev/sdb already mounted or /sheepdog1 busy(multipath,wwid,uuid,udev)

    正常处理逻辑: 先umount /dev/sdb或是umount /backup如果还是显示的busy,你试试下面的方法fuser -m /dev/sdb查看一下是否sdb1正在被使用,或是有进程正在 ...

  2. GOF23设计模式之状态模式(state)

    一.状态模式概述 用于解决系统中复杂对象的状态转换以及不同状态下行为的封装问题. 结构: (1)Context 环境类   环境类中维护一个 State 对象,它定义了当前的状态. (2)State ...

  3. Hibernate学习3—映射对象标识符(OID)

    一.Hibernate 用对象标识符(OID)来区分对象 作如下代码的实验: public class StudentTest { public static void main(String[] a ...

  4. python查找字符串 函数find() 用法

    sStr1 = 'abcdefg' sStr2 = 'cde' print sStr1.find(sStr2) 输出 2意思是在sStr1字符里的第2位置找到了包含cde字符的字段

  5. 获取响应数据___JSON Extractor 后置处理器

    对于大部分请求返回的结果,都是json,有一个更方便使用的插件:JSON Extractor 不过得首先下载插件 https://jmeter-plugins.org/wiki/JSONPathExt ...

  6. 配置IVR实现语音

    1.新建系统录音档   登入FreePBX,在Admin面板下选择System Recordings,如下图:   在这个页面可以上传制作好的一些录音,例如像“欢迎致电XXX,按1中文,按2英文... ...

  7. GIL与线程、进程、协程

    GIL全局解释器锁: 1.相信大家都知道python代码是不能直接被机器cpu识别和执行的,它要经过python解释器(也就是我们执行时候的python3 name.py)被编译成机器语言,pytho ...

  8. ubuntu下安装stm32开发环境

    在windowns下开发stm32刚开始学最烦的就是创建工程模板,都不知道为什么要那样设置,而且步骤繁多.现在我告诉大家一个好消息,在linux下配置stm32开发环境包括创建工程,使用JLink仿真 ...

  9. Netty生产级的心跳和重连机制

    今天研究的是,心跳和重连,虽然这次是大神写的代码,但是万变不离其宗,我们先回顾一下Netty应用心跳和重连的整个过程: 1)客户端连接服务端 2)在客户端的的ChannelPipeline中加入一个比 ...

  10. halcon连续采集图像

    dev_close_window()dev_update_window('off')create_bar_code_model ([], [], BarCodeHandle)dev_open_wind ...