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

Che*_*rry 2 python opencv image-processing template-matching opencv3.0

这是我用于模板匹配的代码,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()
Run Code Online (Sandbox Code Playgroud)

Zda*_*daR 6

如果您浏览cv2.matchTemplate() docs,该函数会返回一个模糊单通道矩阵,其中包含模板和输入图像片段的匹配分数。对于cv2.TM_CCOEFF方法,得分最高的点将是最亮的,但对于cv2.TM_SQDIFF_NORMED方法,得分最高的点将是最暗的

cv2.TM_CCOEFF 结果:

CV2.TM_CCOEFF

cv2.TM_SQDIFF_NORMED 结果:

在此输入图像描述

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