opencv进阶学习笔记8:模板匹配
基礎版筆記傳送門:
python3+opencv學習筆記匯總目錄(適合基礎入門學習)
進階版筆記目錄鏈接:
python+opencv進階版學習筆記目錄(適合有一定基礎)
模板匹配原理
模板匹配(TemplateMatching)就是在一幅圖像中尋找和模板圖像(template)最相似的區域,該方法原理簡單計算速度快,能夠應用于目標識別,目標跟蹤等多個領域。
模板匹配就是在整個圖像區域發現與給定子圖像匹配的小塊區域。
首先需要一個模板圖像T(子圖像)和一個待檢測的圖像(源圖像S)
在待檢測圖像從左到右,從上到下計算模板圖像與重疊子圖像的匹配度,匹配度越高,兩者相同的可能性越大。
缺點:模板圖像尺寸和待檢測圖像尺寸問題。模板尺寸必須小于待檢測圖片尺寸。
匹配度量的方法有:
CV_TM_SQDIFF 平方差匹配法,最好的匹配為0,值越大匹配越差
CV_TM_SQDIFF_NORMED 歸一化平方差匹配法
CV_TM_CCORR 相關匹配法,采用乘法操作,數值越大表明匹配越好
CV_TM_CCORR_NORMED 歸一化相關匹配法
CV_TM_CCOEFF 相關系數匹配法,最好的匹配為1,-1表示最差的匹配
CV_TM_CCOEFF_NORMED 歸一化相關系數匹配法
前面兩種方法為越小的值表示越匹配,后四種方法值越大越匹配。
OpenCV模板匹配實現
cv2.matchTemplate(image, templ, method, result=None, mask=None)
image:待搜索圖像
templ:模板圖像
result:匹配結果,是一個矩陣
method:計算匹配程度的方法
cv2.minMaxLoc(src, mask=None)
src是一個矩陣。輸入cv2.matchTemplate的返回值
函數功能:假設有一個矩陣a,現在需要求這個矩陣的最小值,最大值,并得到最大值,最小值的索引。索引即位置坐標
import cv2 as cv import numpy as npdef template_demo():tpl = cv.imread("head.png")#模板target = cv.imread("yangmi.jpg")#待檢測圖cv.imshow("template image", tpl)#cv.imshow("target image", target)methods = [cv.TM_SQDIFF_NORMED, cv.TM_CCORR_NORMED, cv.TM_CCOEFF_NORMED]#歸一化均方誤差,歸一化相關匹配,歸一化相關系數th, tw = tpl.shape[:2]#取高寬,不取通道 模板高寬for md in methods:print(md)result = cv.matchTemplate(target, tpl, md)min_val, max_val, min_loc, max_loc = cv.minMaxLoc(result)#尋找最小值,最大值。最小值位置,最大值位置if md == cv.TM_SQDIFF_NORMED:tl = min_locelse:tl = max_locbr = (tl[0]+tw, tl[1]+th);cv.rectangle(target, tl, br, (0, 0, 255), 2)#在待檢測圖像上畫矩形框。tl為矩形左上角,br為矩形右下角cv.imshow("match-"+str(md), target)#cv.imshow("match-" + np.str(md), result)#"match-" + np.str(md) 為窗口名print("--------- Python OpenCV Tutorial ---------")template_demo() cv.waitKey(0)cv.destroyAllWindows()模板圖像尺寸必須小于待檢測圖像尺寸。可以自己修改尺寸,使滿足要求。
result結果樣子
md=1,3,5
左上角為模板,其余三圖為結果、
電氣專業的計算機萌新,寫博文不容易。如果你覺得本文對你有用,請點個贊再走,謝謝。
總結
以上是生活随笔為你收集整理的opencv进阶学习笔记8:模板匹配的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: opencv进阶学习笔记7:直方图,直方
- 下一篇: 九红风光草原路大货车限行吗?