2014年2月16日日曜日

テンプレートマッチング

TemplateMatching.h
--------------------------

#pragma once
#include "cvbase.h"
class TemplateMatching :
public CVBase
{
public:
TemplateMatching(void);
~TemplateMatching(void);
void mainloop(void);
};



TemplateMatching.cpp
--------------------------
#include "TemplateMatching.h"


TemplateMatching::TemplateMatching(void)
{
}


TemplateMatching::~TemplateMatching(void)
{
}

void TemplateMatching::mainloop(void)
{
cv::Mat search_img = cv::imread("room7.png", 1);
  if(search_img.empty()) return;
  // テンプレート画像
  cv::Mat tmp_img = cv::imread("room7_tmp_2.png", 1);
  if(tmp_img.empty()) return;

  cv::Mat result_img;
  // テンプレートマッチング
  cv::matchTemplate(search_img, tmp_img, result_img, CV_TM_CCOEFF_NORMED);

  // 最大のスコアの場所を探す
  cv::Rect roi_rect(0, 0, tmp_img.cols, tmp_img.rows);
  cv::Point max_pt;
  double maxVal;
  cv::minMaxLoc(result_img, NULL, &maxVal, NULL, &max_pt);
  roi_rect.x = max_pt.x;
  roi_rect.y = max_pt.y;
  std::cout << "(" << max_pt.x << ", " << max_pt.y << "), score=" << maxVal << std::endl;
  // 探索結果の場所に矩形を描画
  cv::rectangle(search_img, roi_rect, cv::Scalar(0,0,255), 3);

  cv::namedWindow("search image", CV_WINDOW_AUTOSIZE|CV_WINDOW_FREERATIO);
  cv::namedWindow("result image", CV_WINDOW_AUTOSIZE|CV_WINDOW_FREERATIO);
  cv::imshow("search image", search_img);
  cv::imshow("result image", result_img);
  cv::waitKey(0);
}

0 件のコメント:

コメントを投稿