如何找到模板匹配精度

时间:2019-02-23 11:01:13

标签: python numpy opencv image-processing computer-vision

我正在做模板匹配
现在,我要做的就是找到模板匹配的准确性
我已经完成了模板匹配,但是如何获得准确性 我想我必须减去匹配的区域和模板图像。 我该如何实现

代码

import cv2 as cv
import numpy as np
import matplotlib.pyplot as plt

img = cv.imread('image.jpg',0)
img1 = img.copy()
template = cv.imread('template.jpg',0)
w, h = template.shape[::-1]

method = ['cv.TM_CCOEFF_NORMED','cv.TM_CCORR_NORMED']
for meth in method:
    img = img1.copy()
    method = eval(meth)

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

    bottom_right = (top_left[0] + w, top_left[1] + h)
    cv.rectangle(img,top_left, bottom_right, 255, 2)
    plt.subplot(121)
    plt.imshow(res,cmap = 'gray')
    plt.title('Matching Result')

    plt.subplot(122)
    plt.imshow(img,cmap = 'gray')
    plt.title('Detected Point') 
    plt.show()

2 个答案:

答案 0 :(得分:0)

有几个指标示例可以用来比较图像。其中一些是:

所有这些都需要对图像的像素值进行一些基本运算才能进行比较。

答案 1 :(得分:0)

请不要使用绝对差分或任何类似方法来计算精度。您已经在变量min_val, max_val中获得了精度值。

OpenCV模板匹配使用various forms of correlation来计算匹配。因此,当您使用cv.matchTemplate(img,template,method)时,存储在res图像中的值就是这种相关性的结果。

因此,当您使用cv.minMaxLoc(res)时,您正在计算此相关的最小和最大结果。我只是使用max_val来告诉我它的匹配程度。由于min_valmax_val都在[-1.0, 1.0]范围内,因此如果max_val为1.0,则将其作为100%匹配,将max_val为0.5 50%匹配,依此类推。

我尝试使用min_valmax_val的组合来缩放值以获得更好的理解,但是我发现仅使用max_val就可以得到期望的结果。