模板匹配-opencv

模板匹配

模板匹配是在一张图像中需要另一幅模板图像最相似部分的方法。
opencv 库中集成的模板匹配函数 cv::matchTemplate() 可以得到模板匹配的结果。
其原理为模板图片在匹配图像中进行滑动,每次计算模板和掩盖部分图像的相似度,得到带匹配图像的匹配结果,通过筛选出最大值,找出图像中的最大匹配度的位置。

void cv::matchTemplate(InputArray image,InputArray  templ, OutputArray result,
							int	method,InputArray mask = noArray())	

python:
cv.matchTemplate(image,templ,method[, result[, mask]])->result

matchTemplate 函数解析-opencv文档函数说明
匹配方式:
匹配方式
cv::TM_SQDIFF为平方差匹配,计算模板和掩盖图像的平方差,匹配最好结果为0,差值越大,匹配度越差。cv::TM_SQDIFF_NORMED 为标准平方差匹配,将匹配结果限制在0~1之间,结果接近0为匹配度高,接近1为匹配度差。公式如下图:
在这里插入图片描述
cv::TM_CCORR为相关匹配,计算模板和掩盖图像的乘法结果,结果越大匹配结果越好。结果越接近0,匹配度越差。cv::TM_CCORR_NORMED 为标准相关匹配,将匹配结果限制在0~1之间,结果接近0为匹配度差,接近1为匹配度好。公式如下图:在这里插入图片描述

cv::TM_CCOEFF为相关系数匹配,计算模板和掩盖图像的相关性,结果越大匹配结果越好。cv::TM_CCOEFF_NORMED 为标准相关系数匹配,将匹配结果限制在0~1之间,结果接近0为匹配度差,接近1为匹配度好。公式如下图:
在这里插入图片描述
一般使用 TM_SQDIFF_NORMED |TM_CCORR_NORMED| TM_CCOEFF_NORMED这三种标准化之后的方式。
经过模板匹配后的结果使用函数:

void cv::minMaxLoc(cv::InputArray src,double *minVal,
			double *maxVal = (double*)0,cv::Point *minLoc = (cv::Point*)0,	
			cv::Point *maxLoc = (cv::Point*)0,cv::InputArray mask = npArray())

通过确定匹配结果的最大值最小值的位置,选择图像中的最佳匹配位置。
博文参考-opencv 模板匹配

如果图像中需要找多个匹配位置,可以通过设置阈值的方式来进行粗定位查找。

例如:棋盘格角点检测

opencv提供的方法:

cv::findCheseboardCorners()	//寻找角点
cv::cornerSubpix()		//压像素检测
cv::drawChessboardCorners()	// 绘制角点

根据模板匹配的方式寻找角点:

void BuildChessBoardCornerTemplate(); //建立棋盘格角点模板
bool GetChessBoardCorners();		// 匹配得到棋盘格角点

注: 由于当匹配图像较大时,模板匹配所需时间长,所以该方法当角点较少时可以适用,只是提供模板匹配的思路。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值