zl程序教程

您现在的位置是:首页 >  后端

当前栏目

OpenCV模板检测

Opencv模板 检测
2023-09-14 09:05:26 时间

1、概述

  案例:使用OpenCV的模板检测在场景图中找出模板图像,并将其框出来。

  简单理解概念:模板匹配其实就是在整个场景图像中发现与给定子图像(模板图像)匹配的小块区域。可以理解为找对象  

模板匹配方法API函数介绍
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) )
matchTemplate函数中的method参数中提供了6种匹配度量方法,如下:
(1).平方差匹配法CV_TM_SQDIFF
(2)归一化平方差匹配法CV_TM_SQDIFF_NORMED
(3)相关匹配法CV_TM_CCORR
(4)归一化相关匹配法CV_TM_CCORR_NORMED
(5)系数匹配法CV_TM_CCOEFF
(6)化相关系数匹配法CV_TMCCOEFF_NORMED

  模板匹配使用步骤:

    1.载入场景图像及模板图像

    2.将场景图像及模板图像转换Wie灰度图(因为原图像只支持8bit和32bit浮点数)

    3.创建一个画布用来输出匹配结果

    4.使用matchTemplate函数进行匹配

    5.将执行结果result进行归一化处理

    6.获取最大或最小匹配系数,因为下面例子中我们使用的是平方差,所以要取最小值,值越小越好

    7.开始绘制矩形区域

    8.显示绘制矩形区域后的图像

2、代码示例

 //【1】场景图片及模板图像
    Mat src = imread(filePath);
    Mat src_clone = src.clone();
    Mat src_template = imread("C:\\Users\\wei.yang\\Downloads\\opencv_res\\aoteman_template.jpg");//模板图像
    imshow("src_template",src_template);
    //【1】转换灰度图图像
    cvtColor(src,src,COLOR_BGR2GRAY);
    cvtColor(src_template,src_template,COLOR_BGR2GRAY);
    //【3】创建一个画布用来输出匹配结果
    Mat result;
    int width = src.cols-src_template.cols+1;
    int height = src.rows-src_template.rows+1;
    result.create(Size(width,height),CV_32FC1);
    //【4】执行模板陪
    //执行模板匹配
    matchTemplate(src,src_template,result,TM_SQDIFF_NORMED);
    //【5】执行归一化
    normalize(result,result,0,1,NORM_MINMAX);
    //【6】获取最小匹配系数(有可能使用最大或者最小,根据我们所使用的的method不同而不同)
    double minValue,maxValue;
    Point minLoc,maxLoc,matchLoc;
    minMaxLoc(result,&minValue,&maxValue,&minLoc,&maxLoc,Mat());
    matchLoc = minLoc;
    //【7】绘制矩形区域
    rectangle(src_clone,matchLoc,Point(matchLoc.x+src_template.cols,matchLoc.y+src_template.rows),Scalar(0,51,0),2,LINE_AA);
//    rectangle(result,Rect(matchLoc.x,matchLoc.y,src_template.cols,src_template.rows),Scalar(0,0,255),2,LINE_AA);
    //【显示绘制好的图像】
    imshow("src_clone",src_clone);
//    imshow("result",result);

3、图片示例

 

 本文福利,费领取Qt开发学习资料包、技术视频,内容包括(C++语言基础,Qt编程入门,QT信号与槽机制,QT界面开发-图像绘制,QT网络,QT数据库编程,QT项目实战,QSS,OpenCV,Quick模块,面试题等等)↓↓↓↓↓↓见下面↓↓文章底部点击费领取↓↓