OpenCV(二十)模板匹配
目錄
一、基礎(chǔ)理論
1、作用與過程
2、原理
3、函數(shù)matchTemplate
二、代碼
三、效果
參考資料
一、基礎(chǔ)理論
1、作用與過程
????????所謂的模板匹配,就是在給定的圖片中查找和模板最相似的區(qū)域,該算法的輸入包括模板和圖片,整個任務(wù)的思路就是:按照滑窗的思路不斷的移動模板圖片,計算其與圖像中對應(yīng)區(qū)域的匹配度,最終將匹配度最高的區(qū)域選擇為最終的結(jié)果。
2、原理
如果輸入圖像的大小為(WxH),而模板圖像的大小為(wxh),則輸出圖像的大小將為(W-w + 1,H-h + 1)。得到結(jié)果后,可以使用cv.minMaxLoc()函數(shù)查找最大/最小值在哪,將其作為矩形的左上角,并以(w,h)作為矩形的寬度和高度。該矩形是您模板的區(qū)域。
3、函數(shù)matchTemplate
cv2.matchTemplate(image, templ, method, result=None, mask=None)image: 輸入圖像
templ: 輸入模板
method: 方法
????????TM_SQDIFF: 計算平方差, 計算出來的值越小, 越相關(guān)
????????TM_CCORR: 計算相關(guān)性, 計算出來的值越大, 越相關(guān)
????????TM_CCOEFF: 計算相關(guān)系數(shù), 計算出來的值越大, 越相關(guān)
????????TM_SQDIFF_NORMED: 計算歸一化平方不同, 計算出來的值越接近 0, 越相關(guān)
????????TM_CCORR_NORMED: 計算歸一化相關(guān)性, 計算出來的值越接近 1, 越相關(guān)
????????TM_CCOEFF_NORMED: 計算歸一化系數(shù), 計算出來的值越接近 1, 越相關(guān)
二、代碼
#模板匹配
import cv2
import os# 1、讀取圖片 并轉(zhuǎn)化為灰度圖(不可以用彩圖匹配)
img = cv2.imread("Resource/test11.jpg")# 2、讀取模板
template = cv2.imread("Resource/template.jpg")
w, h, c = template.shape #獲得模板長寬# 3、模板匹配
rectangle = cv2.matchTemplate(img, template, cv2.TM_CCOEFF)
min_val, max_val, min_loc, max_loc = cv2.minMaxLoc(rectangle)
#最小值 最大值 最小值坐標(biāo) 最大值坐標(biāo)# 4、獲取匹配模塊的左上角和右下角
top_left = max_loc #左上角
bottom_right = (top_left[0]+w, top_left[1]+h) #右下角# 5、畫矩形并顯示
cv2.rectangle(img, top_left, bottom_right, (0,0,255), 2)
cv2.imshow("matching", img)cv2.waitKey(0)
cv2.destroyAllWindows()
三、效果
原圖??? ? ? ?模板:?
匹配結(jié)果:
??
拓展∶模板匹配不適用于尺度變換、視角變換后的圖像,這時我們就要使用關(guān)鍵點匹配算法,比較經(jīng)典的關(guān)鍵點檢測算法包括SIFT和SURF等,主要的思路是首先通過關(guān)鍵點檢測算法獲取模板和測試圖片中的關(guān)鍵點﹔然后使用關(guān)鍵點匹配算法處理即可,這些關(guān)鍵點可以很好的處理尺度變化、視角變換、旋轉(zhuǎn)變化、光照變化等,具有很好的不變性。
參考資料
https://iamarookie.blog.csdn.net/article/details/119096602
https://www.bilibili.com/video/BV1Fo4y1d7JL?p=39&spm_id_from=pageDriver
總結(jié)
以上是生活随笔為你收集整理的OpenCV(二十)模板匹配的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 奇葩错误:灰度图也想转彩图???(凭空增
- 下一篇: OpenCV(22)SIFT尺度不变特征