如何在模板匹配中使用cv2.minMaxLoc()

时间:2018-11-14 02:05:39

标签: python opencv image-processing opencv3.0 template-matching

这是我用于模板匹配的代码,min_val,max_val,min_loc,max_loc是什么意思?他们是用来干什么的?

import cv2
import numpy as np
from matplotlib import pyplot as plt

img = cv2.imread('C:\\machineLearning\\positive\\1.jpg', 0)
img2 = img.copy()
template = cv2.imread('C:\\machineLearning\\positive\\1_.jpg', 0)
w, h = template.shape[::-1]

img = img2.copy()
method = eval('cv2.TM_SQDIFF')

res = cv2.matchTemplate(img,template,method)
min_val, max_val, min_loc, max_loc = cv2.minMaxLoc(res)

top_left = min_loc
bottom_right = (top_left[0] + w, top_left[1] + h)

cv2.rectangle(img,top_left, bottom_right, 255, 2)

plt.subplot(121),plt.imshow(res,cmap = 'gray')
plt.title('Matching Result'), plt.xticks([]), plt.yticks([])
plt.subplot(122),plt.imshow(img,cmap = 'gray')
plt.title('Detected Point'), plt.xticks([]), plt.yticks([])
plt.suptitle('cv2.TM_SQDIFF')

plt.show()

1 个答案:

答案 0 :(得分:0)

如果您通过# Without docs pip install boto3_type_annotations # Or with docs pip install boto3_type_annotations_with_docs docs,该函数将返回一个模糊的单通道矩阵,其模板和输入图像段的得分匹配。对于cv2.matchTemplate()方法,得分最高的点将是最亮的,但是对于cv2.TM_CCOEFF方法,得分最高的点将是最暗的

cv2.TM_CCOEFF结果:

cv2.TM_CCOEFF

cv2.TM_SQDIFF_NORMED结果:

enter image description here

因此,根据可用的各种方法,有时可能需要获取输出矩阵中最亮的点或最暗的点。 cv2.TM_SQDIFF_NORMED只是这两个通用操作的统一,在使用cv2.minMaxLoc()时,您可以忽略用例的minMaxLoc属性。