一、模板匹配
模板匹配目标在于在A图像中寻找B图像最相似的部分,A为输入图像,B为模板图像。其原理将模板图像B在图像A上滑动,遍历所有像素完成匹配
二、单模板匹配
在opnencv中利用函数cv2.matchTemplate函数实现:
result=cv2.matchTemplate(image,templ,method[,mask])
其中:
result为匹配返回结果,格式为矩阵
image为输入图像
templ为模板图像,必须小于或等于输入图像,图像类型必须相同
method为匹配方法,现阶段有6中方法:
cv2.TM_SQDIFF/cv2.TM_SQDIFF_NORMED/
cv2.TM_CCORR/cv2.TM_CCORR_NORMED
cv2.TM_CCOEFF/cv2.TM_CCOEFF_NORMED
mask为模板掩模,需要和图像模板templ具有相同类型和大小,一般为默认,只有在SQDIFF和CCORR_NORMED中支持
由于不同模板匹配方法不同,选用cv2.TM_SQDIFF函数进行匹配
利用cv2.minMaxLoc( )寻找结果中最大值,最小值,最大值位置,最小值位置
所得到的结果也实验代码如下
import cv2
import numpy as np
from matplotlib import pyplot as plt
#读取图像为灰度图像
img=cv2.imread('C:/Users/wp/Desktop/five/5.jpg',0)
#读取模板图像
template=cv2.imread('C:/Users/wp/Desktop/five/7.jpg',0)
#模板图像尺寸
th,tw=template.shape[::]
print(th,tw)
#进行模板匹配:匹配方式为SQDIFF,result的值为0表示匹配度越好,反之越差
rv=cv2.matchTemplate(img,template,cv2.TM_SQDIFF)
print(rv)
#归一化,将矩阵结果归一到0到1的范围内
cv2.normalize(rv, rv, 0, 1, cv2.NORM_MINMAX, -1 )
print(rv)
minVal,maxVal,minLoc,maxLoc=cv2.minMaxLoc(rv)
#相似度最小值
print("相似度最小值",minVal)
#相似度最大值
print("相似度最大值",maxVal)
#左上顶点坐标
topLeft=minLoc
#右下顶点坐标
bottomRight=(topLeft[0]+tw,topLeft[1]+th)
#画图,左上顶点,和右下顶点,白色255,宽度为2
cv2.rectangle(img,topLeft,bottomRight,255,2)
cv2.imshow("Matching Result", rv)
cv2.imshow("Detected Point", img)
cv2.waitKey()
cv2.destroyAllWindows()
结果:
280 89
[[1.5662291e+08 1.5261354e+08 1.4868202e+08 ... 1.7876922e+08
1.7973040e+08 1.8063094e+08]
[1.5570419e+08 1.5167946e+08 1.4771798e+08 ... 1.7974778e+08
1.8073296e+08 1.8166957e+08]
[1.5488346e+08 1.5082822e+08 1.4682650e+08 ... 1.8087574e+08
1.8187194e+08 1.8283654e+08]
...
[2.4001792e+08 2.3657427e+08 2.3339872e+08 ... 2.5952496e+08
2.6294157e+08 2.6638003e+08]
[2.4198950e+08 2.3858016e+08 2.3543363e+08 ... 2.6101248e+08
2.6439066e+08 2.6780973e+08]
[2.4398931e+08 2.4063030e+08 2.3747517e+08 ... 2.6249709e+08
2.6586096e+08 2.6926288e+08]]
[[0.5814756 0.5665784 0.5519705 ... 0.66376233 0.66733366 0.67067975]
[0.57806206 0.5631077 0.54838854 ... 0.6673982 0.6710588 0.67453885]
[0.5750125 0.5599449 0.54507613 ... 0.6715893 0.67529076 0.67887485]
...
[0.89133763 0.8785424 0.8667434 ... 0.9638179 0.9765126 0.9892885 ]
[0.8986632 0.8859955 0.8743043 ... 0.9693449 0.9818968 0.9946007 ]
[0.9060937 0.893613 0.88188976 ... 0.9748611 0.9873599 1. ]]
相似度最小值 0.0
相似度最大值 1.0
三、参考文献及书籍
Opencv轻松入门,面向python,电子工业出版社,李立宗著
发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/114566.html原文链接:https://javaforall.cn
【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛
【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...