我在圖像處理中的新手,我瞭解模版匹配,並且我從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