分享

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

 看见就非常 2020-05-07

背景简介

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

函数说明

1、matchTemplate(image,template,method)

参数说明:

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

1
2
3
4
5
6
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

实现代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
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

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多