python opencv模板匹配,图像识别 模板匹配 opencv

  python opencv模板匹配,图像识别 模板匹配 opencv

  提供模板图像和目标图像,并满足模板图像是目标图像的一部分。从目标图像中寻找特定模板图像的过程就是模板匹配。本文将详细讲解如何使用PythonOpenCV实现图像模板匹配,供参考。

  00-1010 1.什么是模板匹配和模板匹配方法?matchTemplate()介绍备料2。单模板匹配2.1单目标匹配2.2多目标匹配3。多模板匹配

  

目录

 

  

1.什么是模板匹配及模板匹配方法matchTemplate()

 

  提供模板图像和目标图像,并满足模板图像是目标图像的一部分。从目标图像中寻找特定模板图像的过程就是模板匹配。OpenCV提供了matchTemplate()方法来帮助我们实现模板匹配。

  此方法的语法如下:

  cv2.matchTemplate(image,templ,method,result=None,mask=None)

  在…之中

  图像是目标图像。

  Templ是模板图像。

  方法是匹配方法。

  掩码,这是可选的。仅当方法为cv2时,才支持此参数。TM_SQDIFF或cv2.tm _ ccorr _ normalized。

  方法参数可以是下列值:

  参数描述cv2。TM_SQDIFF差平方和匹配,也叫平方差匹配。可以理解为基于差异度的匹配,差异度越小,匹配度越高。完全匹配时间值的差值的平方和为0。2.TM _ sqdiff _规范化相关匹配。可以理解为基于相似度的匹配。相似度越高,计算结果越大,匹配度越高。2.TM _ CCORR标准相关匹配。规则同上。2.CV2的相关系数。TM _ ccorr _ normalized匹配cv2的相关系数。TM_CCOEFF匹配。也是基于相似度的匹配。计算结果是一个从-1到1的浮点数,1表示完全匹配,0表示与之无关,-1表示两张图片的亮度正好相反。2.CVTM _ CCCoeff _归一化标准匹配的相关系数,规则同上。使用matchTemplate()方法,模板将覆盖图像中的每个区域一次,每次都用选择的方法计算。每次的计算结果最终以二维数组的形式返回给我们。

  

介绍

 

  为方便展示,特准备以下图片资料:

  选取世界名画《三英战吕布》 (test.png),图像形状为(738,675,3):

  剪下一部分图像元素作为下面要用到的模板材料。素材代码如下(不建议截图,截图被挖出来大小不能保证):

  导入cv2

  img=cv2.imread(test.png )

  打印(图像形状)

  #电灯

  img1=img[20:220,320:480,]

  #虎牢关牌匾

  img2=img[75:150,200:310,]

  #青龙岛

  img3=img[170:530,575:650,]

  #关云长

  img4=img[270:670,160:330,]

  cv2.imshow(img0 ,img)

  cv2.imshow(img1 ,img1)

  cv2.imshow(img2 ,img2)

  cv2.imshow(img3 ,img3)

  cv2.imshow(i

  mg4", img4)

  cv2.waitKey()

  cv2.destroyAllWindows()

  cv2.imwrite(template_pic1.jpg, img1)

  cv2.imwrite(template_pic2.jpg, img2)

  cv2.imwrite(template_pic3.jpg, img3)

  cv2.imwrite(template_pic4.jpg, img4)

  

  取出的模板素材如下:

  电灯

  

 

  虎牢关牌匾

  

 

  青龙刀

  

 

  关云长

  

 

  

 

  

2.单模板匹配

 

  单模板匹配,即在匹配时中只使用到一个模板的匹配过程。具体又可以分为单目标匹配和多目标匹配。

  

 

  

2.1 单目标匹配

 

  单目标匹配,即模板在目标图像中只匹配 匹配程度最高的一个匹配结果。

  这需要找出这一次匹配结果所在位置的坐标来确定其位置,

  OpenCV提供了cv2.minMAXLoc()来实现。

  该方法参数为matchTemplate()的返回值,会返回一个元组,元组中有四个值,分别是最小值、最大值、最小值时图像左上角顶点坐标,最大值时图像左上角顶点坐标。

  接下来,使用 电灯(template_pic1) 图片来匹配原图,并用红色的矩形在原图像中圈出模板图像,使用标准差值平方和的匹配方式,代码如下:

  

import cv2

 

  如图所示,成功标出了模板图。

  

 

  如果要从多幅图像中,找出与模板最匹配的结果,

  以标准差值平方和的匹配方式为例,
则可以对这些图像进行遍历,并比较每幅图像对应结果中的最小值,找出最小值中的最小值,则为最佳匹配项。

  以两幅图像为例,将原图翻转一次,生成一张新的图像(翻转后结果与原图较像,但差异巨大)

  翻转产生素材(test1.png)

  

import cv2

 

  

 

  然后使用模板 关云长 (template_pic4.jpg)对两幅图像进行匹配,输出最佳匹配结果,并画红框展示:

  

import cv2

 

  如图,test.png中的关云长与模板更为匹配。

  

 

  

 

  

2.2 多目标匹配

 

  多目标匹配,即在目标图像中匹配出所有与模板图像匹配的结果。可以使用相关匹配或相关系数匹配。

  素材准备

  还以原图像"test.png"为参照,

  为了产生方便我们做示例的图像,我们在该图像的基础上多加一盏电灯,生成"test2.png"

  

import cv2

 

  

 

  多目标匹配

  多目标匹配即对matchTemplate()匹配的总的结果,的计算情况数据,使用for循环遍历,并设定一个判断标准。

  如使用标准相关系数(cv2.TM_CCOEFF_NORMED)的方法判断,如:如果计算值大于0.99,则我们认为匹配成功了。

  使用电灯模板"template_pic1.jpg",匹配图像test2.png。并对匹配的结果用红色的矩形框标记。

  代码示例如下:

  

import cv2

 

  程序执行结果如下,成功匹配出了两盏灯。

  

 

  

 

  

3.多模板匹配

 

  多模板匹配,即进行了n次单模板的匹配过程。 

  直接上示例:

  在test.png中匹配电灯、青龙刀、虎牢关牌匾、关云长四个图像模板:

  

import cv2

 

  匹配效果如下:

  

 

  以上就是Python OpenCV实现图像模板匹配详解的详细内容,更多关于Python OpenCV图像模板匹配的资料请关注盛行IT软件开发工作室其它相关文章!

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: