R=cv2.matchTemplate(I,T,method)计算图像{}。此图像的每个像素x,y表示一个标记,这取决于模板T与从x,y开始的I的子图像之间的相似性。例如,如果应用方法cv.TM_SQDIFF,则标记的计算如下:
如果R[x,y]为空,则子图像I[x:x+sxT,y:y+syT]与模板T完全相同。R[x,y]越小,子图像越接近模板。在cv2.minMaxLoc(R)用于求R的最小值。与I的任何其他子图像相比,I的相应子图像更接近模板。在
如果图像I不包含模板,则与R最小值相对应的I的子图像可能与T非常不同。但最小值反映了这一点!实际上,R上的一个阈值可以作为判断模板是否在图像中的一种方法。
选择阈值的值是一个棘手的任务。它可以是R最大值的一个分数,也可以是R的平均值的一个分数。模板大小的影响可以用R除以sxT*syT来讨论。例如,R的最大值取决于模板大小和图像类型。例如,对于CV_8UC3(无符号字符,3个通道)R的最大值是255*3*sxT*syT。在
下面是一个例子:import cv2
img = cv2.imread('image.jpg',eval('cv2.CV_LOAD_IMAGE_COLOR'))
template = cv2.imread('template.jpg',eval('cv2.CV_LOAD_IMAGE_COLOR'))