python第三方模块opencv-python模版匹配图像识别简介
laoyan 2018-01-08 17:32:28
分 享


背景简介

模板匹配通常被用于目标检测、相似度分析中,opencv2和opencv3中提供了一个专门用于模板匹配的函数matchTemplate(),下面就对该函数以及其它设计的函数进行详细的介绍

函数说明

1、matchTemplate(image,template,method)

参数说明:

image :源图,待搜索图像
template:模版图像,需要搜索的图像
method:计算匹配程度的方法,具体method方法有如下:

CV_TM_SQDIFF 平方差匹配法:该方法采用平方差来进行匹配;最好的匹配值为0;匹配越差,匹配值越大
CV_TM_CCORR 相关匹配法:该方法采用乘法操作;数值越大表明匹配程度越好
CV_TM_CCOEFF 相关系数匹配法:1表示完美的匹配;-1表示最差的匹配
CV_TM_SQDIFF_NORMED 归一化平方差匹配法      
CV_TM_CCORR_NORMED 归一化相关匹配法      
CV_TM_CCOEFF_NORMED 归一化相关系数匹配法


最后,可cvMinMaxLoc() 函数获取最后的最佳匹配结果

2、minMaxLoc(res)

minMaxLoc寻找矩阵(一维数组当作向量,用Mat定义) 中最小值和最大值的位置      
注意:多通道图像在使用minMaxLoc()函数是不能给出其最大最小值坐标的,因为每个像素点其实有多个坐标,所以是不会给出的。因此在编程时,这2个位置应该给NULL。

res 为 上面函数 matchTemplate 所匹配到的结果为参数

min_val,max_val,min_loc,max_loc = cv2.minMaxLoc(res)

我们定义一下变量用于接收minMaxLoc获取匹配的图像的匹配值和坐标

min_val:最小匹配值
max_val:最大匹配值
min_loc:最小坐标
max_loc:最大坐标

举个例子

找出模版图片在原图中的为之并标注


源图片


sourcetest.png


模版图片


templatewatchtest.png


实现代码如下:


import cv2
imgsr=cv2.imread("/Users/laoyan/Desktop/sourcetest.png")
imgtm=cv2.imread("/Users/laoyan/Desktop/templatewatchtest.png")
#获取模板图片的高和宽
imgtmh1 = imgtm.shape[0]
imgtmw1 = imgtm.shape[1]
#与模版比对
res=cv2.matchTemplate(imgsr,imgtm,cv2.TM_CCOEFF_NORMED)
min_val,max_val,min_loc,max_loc = cv2.minMaxLoc(res)
img=cv2.rectangle(imgsr,max_loc,(max_loc[0]+imgtmw1,max_loc[1]+imgtmh1),(0,0,255),2)
cv2.imshow('Image',img)
cv2.waitKey(0)
cv2.destroyAllWindows()


结果如下:


python第三方模块opencv-python模版匹配图像识别简介03.png


我要小额支持下

取消

感谢您的支持,我会继续努力的!

扫码支持
扫码打赏,你说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

取消
吐槽一下

游客

所有吐槽
  • 暂时还没有吐槽,赶紧来吐槽!