码迷,mamicode.com
首页 > 其他好文 > 详细

opencv —— matchTemplate 模板匹配

时间:2020-03-10 13:58:45      阅读:56      评论:0      收藏:0      [点我收藏+]

标签:lse   block   需要   order   ace   浮点型   数据   clone   doc   

模板匹配的概念和原理

模板匹配就是在一幅图像中寻找与模板图像最匹配(相似)部分。

具体步骤为从左到右,从上向下计算模板图像与图像覆盖区域的匹配度,匹配程度越大,两者相同的可能性越大。

技术图片

 

实现模板匹配:matchTemplate 函数

void matchTemplate(InputArray image, InputArray temp1, OutputArray result, int method);

  • image,待搜索的图像,且需为 8 位或 32 位浮点型图像。
  • temp1,搜索模板,需要和原图片有一样的数据类型,且尺寸不能大于源图像。
  • result,比较结果的映射图像,其必须为单通道、32 位浮点型图像,大小为 (image.cols - temp1.cols +1)×(image.rows - temp1.rows +1)
  • method,匹配方法,有 6 种选项:
匹配方法 计算公式

平方差匹配法

TM_SQDIFF

 

技术图片

归一化平方差匹配法

TM_SQDIFF_NORMED

 

技术图片

相关匹配法

TM_CCORR

 

技术图片

归一化相关匹配法

TM_CCORR_NORMED

 

技术图片

系数匹配法

TM_CCOEFF

 

技术图片

其中

技术图片

化相关系数匹配法

TM_CCOEFF_NORMED

 技术图片

 

代码示例:

#include<opencv.hpp>
#include<iostream>
#include<string>
using namespace std;
using namespace cv;
Mat src, temp;
int method = 0;
void ChangeMethod(int, void*) {
    switch (method){
    case 0:
        method = TM_SQDIFF;
        break;
    case 1:
        method = TM_SQDIFF_NORMED;
        break;
    case 2:
        method = TM_CCORR;
        break;
    case 3:
        method = TM_CCORR_NORMED;
        break;
    case 4:
        method = TM_CCOEFF;
        break;
    case 5:
        method = TM_CCOEFF_NORMED;
        break;
    }
    Mat result;
    matchTemplate(src, temp, result, method);
    imshow("result", result);

    Mat dst = src.clone();
    double mxValue, mnValue;
    Point mxPoint, mnPoint;
    minMaxLoc(result, &mnValue, &mxValue, &mnPoint, &mxPoint);
//https://www.cnblogs.com/bjxqmy/p/12386274.html
if (method == TM_SQDIFF || method == TM_SQDIFF_NORMED) { rectangle(dst, mnPoint, Point(mnPoint.x + temp.cols, mnPoint.y + temp.rows), Scalar(0, 0, 255)); } else{ rectangle(dst, mxPoint, Point(mxPoint.x + temp.cols, mxPoint.y + temp.rows), Scalar(0, 0, 255)); } imshow("dst", dst); } int main() { src = imread("C:/Users/齐明洋/Desktop/1.jpg"); temp = imread("C:/Users/齐明洋/Desktop/a.jpg"); imshow("src", src); imshow("temp", temp); namedWindow("dst"); createTrackbar("method", "dst", &method, 5, ChangeMethod); ChangeMethod(0, 0); waitKey(0); }

效果演示:

原图和模板:

技术图片

 

TM_SQDIFF 方法

技术图片

 

TM_SQDIFF_NORMED 方法

技术图片

 

TM_CCORR 方法

技术图片

 

TM_CCORR_NORMED 方法

技术图片

 

TM_CCOEFF 方法

技术图片

 

TM_CCOEFF_NORMED 方法

技术图片

 

借鉴博客:http://www.opencv.org.cn/opencvdoc/2.3.2/html/doc/tutorials/imgproc/histograms/template_matching/template_matching.html

https://www.cnblogs.com/fuzhuoxin/p/12158777.html

 

opencv —— matchTemplate 模板匹配

标签:lse   block   需要   order   ace   浮点型   数据   clone   doc   

原文地址:https://www.cnblogs.com/bjxqmy/p/12454971.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!