学会opencv(十七)最终章——模板匹配

简介: 学会opencv(十七)最终章——模板匹配

模板匹配(Template Match)


模板匹配就是在整个图像区域发现与给定子图像匹配的小块区域。

所以模板匹配首先需要一个模板图像T(给定的子图像)

另外需要一个待检测的图像-源图像S

工作方法,在带检测图像上,从左到右,从上向下计算模板图像与重叠子图像的匹配度,匹配程度越大,两者相同的可能性越大。

matchTemplate(

InputArray image,// 源图像,必须是8-bit或者32-bit浮点数图像

InputArray templ,// 模板图像,类型与输入图像一致

OutputArray result,// 输出结果,必须是单通道32位浮点数,假设源图像WxH,模板图像wxh,则结果必须为W-w+1, H-h+1的大小。

int method,//使用的匹配方法

InputArray mask=noArray()//(optional)

)

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


相关文章
|
6月前
|
计算机视觉 Python
最快速度写出一个识别效果——OpenCV模板匹配(含代码)
最快速度写出一个识别效果——OpenCV模板匹配(含代码)
119 0
|
4月前
|
计算机视觉 Python
OpenCV多模板匹配讲解与匹配汽车实战(附Python源码)
OpenCV多模板匹配讲解与匹配汽车实战(附Python源码)
65 0
OpenCV多模板匹配讲解与匹配汽车实战(附Python源码)
|
1月前
|
存储 计算机视觉 C++
Opencv (C++)系列学习---模板匹配
Opencv (C++)系列学习---模板匹配
|
6月前
|
计算机视觉
OpenCV-模板匹配cv::matchTemplate
OpenCV-模板匹配cv::matchTemplate
|
4月前
|
计算机视觉
OpenCV(十九):模板匹配
OpenCV(十九):模板匹配
32 0
|
7月前
|
计算机视觉
12.【openCV常用函数模板】
12.【openCV常用函数模板】
18 0
|
API 计算机视觉
Opencv实战案例——模板匹配实现银行卡号识别(附详细介绍及完整代码下载地址)(二)
Opencv实战案例——模板匹配实现银行卡号识别(附详细介绍及完整代码下载地址)
200 0
Opencv实战案例——模板匹配实现银行卡号识别(附详细介绍及完整代码下载地址)(二)
|
机器学习/深度学习 算法 API
Opencv实战案例——模板匹配实现银行卡号识别(附详细介绍及完整代码下载地址)(一)
Opencv实战案例——模板匹配实现银行卡号识别(附详细介绍及完整代码下载地址)
397 0
Opencv实战案例——模板匹配实现银行卡号识别(附详细介绍及完整代码下载地址)(一)
|
算法 计算机视觉
Python-OpenCV图像处理-12-模板匹配
Python-OpenCV图像处理-12-模板匹配
156 0
Python-OpenCV图像处理-12-模板匹配
|
计算机视觉
opencv 模板匹配&&形状匹配
opencv 模板匹配&&形状匹配
411 0
opencv 模板匹配&&形状匹配