我正在做模板匹配
现在,我要做的就是找到模板匹配的准确性
我已经完成了模板匹配,但是如何获得准确性
我想我必须减去匹配的区域和模板图像。
我该如何实现
代码
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()
答案 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_val
和max_val
都在[-1.0, 1.0]
范围内,因此如果max_val
为1.0,则将其作为100%匹配,将max_val
为0.5 50%匹配,依此类推。
我尝试使用min_val
和max_val
的组合来缩放值以获得更好的理解,但是我发现仅使用max_val
就可以得到期望的结果。