opencv常用算法--模板匹配

opencv中模板匹配算法核心:它将模板与原图像中的每个部分进行比较,逐像素滑动。结果是一个相似度的图,该相似度图中每个像素值反映了模板与原图像中该位置的相似程度。

从本质上讲,它将模板在图像上进行卷积,类似于卷积神经网络中使用卷积核的方式。通过这个过程,创建了一个新的图像或矩阵,其中每个像素值表示模板与源图像中相应区域之间的相似性。通过分析该结果图像,我们可以识别峰值,这些峰值表示源图像中存在模板图像的精确位置。值得注意的是,模板匹配的实现可能会有所不同,主要是基于相似性的度量因方法各异而不同,这里不做扩展展开。

模板匹配--matchTemplate

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

image:待搜索图像(大图)

temp1:搜索模板,需和原图一样数据类型且尺寸大小不能大于源图像

reuslt:比较结果的映射图像,其必须为单通道的,32位浮点型图像,如果原图(待搜索图像)尺寸为W*H,二temp1的尺寸为w*h,则result的尺寸一定是(W-w+1)*(H-h+1)

method:指定的匹配方法,有如下六种:

1     TM_SQDIFF --- 平方差匹配法(最好匹配0)
2     TM_SQDIFF_NORMED --- 归一化平方差匹配法(最好匹配0)
3     TM_CCORR --- 相关匹配法(最坏匹配0)
4     TM_CCORR_NORMED ---归一化相关匹配法(最坏匹配0)
5     TM_CCOEFF --- 系数匹配法(最好匹配1)
6     TM_CCOEFF_NORMED --- 归一化系数匹配法(最好匹配1)

找到最佳匹配

在完成模板匹配后,我们需要找到输入图像中与模板最匹配的位置。为了实现这一点,我们可以使用cv2.minMaxLoc()函数,该函数会从给定图像中找到最大值和最小值的位置。

# 找到最佳匹配
min_val, max_val, min_loc, max_loc = cv2.minMaxLoc(result)
top_left = max_loc
bottom_right = (top_left[0] + w, top_left[1] + h)

# 在原图中绘制矩形框
cv2.rectangle(img,top_left, bottom_right, 255, 2)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值