zoukankan      html  css  js  c++  java
  • Opencv Match Template(轮廓匹配)

    #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;
    }

     

  • 相关阅读:
    Linux常用命令及示例(全)
    linux下安装配置svn服务器
    Kafka、Redis和其它消息组件比较
    ORACLE定时备份方案
    mysql库表优化实例
    携程apollp快速部署DVE集群
    windows 安装Zookeeper 配置集群
    Ubuntu 18.04 LTS 修改Host,使用Host访问
    PowerShell因为在此系统中禁止执行脚本......
    常用第三方工具的Docker命令
  • 原文地址:https://www.cnblogs.com/herd/p/9737314.html
Copyright © 2011-2022 走看看