OpenCV模板检测
一、概述
案例:使用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.显示绘制矩形区域后的图像
二、代码示例
//【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);
三、图片示例
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· .NET10 - 预览版1新功能体验(一)
2020-03-02 使用LruCache和DiskLruCache手写一个ImageLoader