OpenCV+python:模板匹配
生活随笔
收集整理的這篇文章主要介紹了
OpenCV+python:模板匹配
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
1,模板匹配的概念及原理
模板匹配是一項在一幅圖像中尋找與另一幅模板圖像最匹配(相似)部分的技術.
我們需要2幅圖像:
模板 (T): 將和原圖像比照的圖像塊
原圖像 (I): 在這幅圖像里,我們希望找到一塊和模板匹配的區域
我們的目標是檢測最匹配的區域:
為了確定匹配區域, 我們不得不滑動模板圖像和原圖像進行比較:
通過滑動, 我們的意思是圖像塊一次移動一個像素 (從左往右,從上往下). 在每一個位置, 都進行一次度量計算來表明它是 “好” 或 “壞” 地與那個位置匹配 (或者說塊圖像和原圖像的特定區域有多么相似)
對于 T 覆蓋在 I 上的每個位置,你把度量值 保存 到 結果圖像矩陣 R中. 在 R 中的每個位置 (x,y) 都包含匹配度量值:
上圖就是 TM_CCORR_NORMED 方法處理后的結果圖像 R . 最白的位置代表最高的匹配. 正如您所見, 紅色橢圓框住的位置很可能是結果圖像矩陣中的最大數值, 所以這個區域 (以這個點為頂點,長寬和模板圖像一樣大小的矩陣) 被認為是匹配的.
實際上, 我們使用函數 minMaxLoc 來定位在矩陣 R 中的最大值點 (或者最小值, 根據函數輸入的匹配參數) .
OpenCV通過函數 matchTemplate 實現了模板匹配算法. 可用的方法有6個:
源代碼:
import cv2 as cv
import numpy as npdef template_demo():tpl = cv.imread("F:/images/T.png") #模板圖像target = cv.imread("F:/images/I.png")#原圖像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)#將匹配區域繪制到原圖上cv.imshow("match-"+np.str(md), target)# cv.imshow("match-" + np.str(md), result)src = cv.imread("F:/images/I.png")
cv.namedWindow("input image", cv.WINDOW_AUTOSIZE)
cv.imshow("input image", src)
template_demo()
cv.waitKey(0)cv.destroyAllWindows()
運行結果:
總結
以上是生活随笔為你收集整理的OpenCV+python:模板匹配的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 银川山羊下水多少钱?大量收够山羊下水,羊
- 下一篇: 广州的同学看过来,准备16—20号去广州