我在图像处理中的新手,我了解模版匹配,并且我从OpenCV一些帮助,但我不明白的一些代码行,这里是代码模板匹配使用的OpenCV + Python的
import cv2
import numpy as np
from matplotlib import pyplot as plt
img_rgb = cv2.imread('mario.png')
img_gray = cv2.cvtColor(img_rgb, cv2.COLOR_BGR2GRAY)
template = cv2.imread('coin.png', 0)
w, h = template.shape[::-1]
count = 0
res = cv2.matchTemplate(img_gray, template, cv2.TM_CCOEFF_NORMED)
threshold = 0.8
loc = np.where(res >= threshold)
for pt in zip(*loc[::-1]):
count += 1
cv2.rectangle(img_rgb, pt, (pt[0] + w, pt[1] + h), (0,0,255), 2)
cv2.imwrite('res.png', img_rgb)
print(count)
的目标是模板匹配超级马里奥地图中的硬币。
我的问题:
1.在循环for pt in zip(*loc[::-1]):
我把计数器,当我打印的打印65,而硬币只有19
2.什么是可变threshold=0.8
的功能,当我改变的价值,结果图像是变化。
任何人都可以帮助我回答我的问题吗? 预先感谢您。
您是否阅读过关于[matchTemplate'返回的内容的OpenCV文档](http://docs.opencv.org/2.4/modules/imgproc/doc/object_detection.html)? – kmac
是的,我有。但我不明白为什么柜台显示65,而硬币只有19 – Cesario
这种方法不是魔术,所以你会得到一些误报(非硬币标记为硬币)和一些错误的否定(硬币未标记作为硬币)。听起来你有65个硬币标签,图像中只有19个硬币。按照Aditya的建议尝试提高门槛。但是这种方法可能无法达到你所希望的效果。您也可以在之后应用过滤来改善您的结果。 – kmac