Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/354.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/opencv/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何在模板匹配中使用cv2.minMaxLoc()_Python_Opencv_Image Processing_Opencv3.0_Template Matching - Fatal编程技术网

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

Python 如何在模板匹配中使用cv2.minMaxLoc(),python,opencv,image-processing,opencv3.0,template-matching,Python,Opencv,Image Processing,Opencv3.0,Template Matching,这是我用于模板匹配的代码,最小值、最大值、最小位置、最大位置是什么意思?它们是用来干什么的 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_.j

这是我用于模板匹配的代码,最小值、最大值、最小位置、最大位置是什么意思?它们是用来干什么的

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()

如果通过
cv2.matchTemplate()
,函数将返回一个模糊单通道矩阵,其中包含模板和输入图像段的匹配分数。对于
cv2.TM_Cceff
方法,得分最高的点最亮,但对于
cv2.TM_SQDIFF_Normad
方法,得分最高的点最暗

cv2.TM_CCOEFF结果:

cv2.TM_SQDIFF_标准化结果:


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

min\u val==最小值,max\u val==最大值,min\u loc==最小值的位置(来自输入图像的坐标)max_loc==最大值的位置(来自输入图像的坐标),您可以通过在python解释器中执行帮助(cv2.minMaxLoc)来确认这一点。在您给出的代码示例中,min_loc用于设置感兴趣区域边界框的上角。其他变量似乎没有被使用。min_val=最小值,我清楚地知道,因为我懂英语,我问的是文档中所写的最小值的含义()最小值是全局最小值(也称为矩阵所有值中的最小值)。这意味着什么?例如,如果我使用TM_SQDIFF,最小值是否表示匹配量?请查看matchTemplate函数的文档。如果(且仅当)变量“res”包含平方差的结果(且仅此),那么最小值将是全局最小平方差。如果变量确实包含受平方差影响的内容,但不是平方差,那么解释与存储在res中的信息有关。您可以在文档中轻松找到此信息。请检查文档。谢谢,因为IM使用TMySqDIFF方法,我需要考虑MIN属性正确吗?最黑暗的点是什么意思?这是最好的比赛吗?如果它变小了,检测就更准确了?如果它变成一个更大的值,那么检测就更不准确了?是的,准确地说:)(y)