【问题标题】:how to find the template matching accuracy如何找到模板匹配精度
【发布时间】:2019-07-17 08:40:35
【问题描述】:

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

代码

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

【问题讨论】:

  • opencv有absdiff功能

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


【解决方案1】:

请不要使用绝对差异或任何类似的方法来计算准确度。您已经在变量 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 就能得到想要的结果。

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

      猜你喜欢
      • 2016-06-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-03-17
      • 2011-06-13
      • 2019-09-16
      相关资源
      最近更新 更多