OpenCV-Python教程:28.模板匹配

理論

模板匹配是在一個大圖里搜索和找模板圖像位置的方法霉赡。OpenCV有個函數(shù)cv2.matchTemplate()來做這個。它吧模板圖像在輸入圖像上滑動见妒,對比模板和在模板圖像下的輸入圖像塊鞋囊。它返回了一個灰度圖像,每個像素表示那個像素周圍和模板匹配的情況钠至。

如果輸入圖像大小是WxH而模板圖像大小是wxh葛虐,輸出圖像的大小是(W-w+1, H-h+1)棉钧。當你得到了結(jié)果屿脐,你可以用cv2.minMaxLoc()函數(shù)來找最大最小值。把它作為矩形左上角宪卿,w的诵,h作為矩形的寬和高。矩形是你的模板區(qū)域佑钾。

注意:
如果你用cv2.TM_SQDIFF作為比較方法西疤,最小值是最匹配。

OpenCV里的模板匹配

作為例子休溶,我們在照片里搜索messi的臉代赁。所以我做了這個模板:

我們會嘗試所有的比較方法

import cv2
import numpy as np
from matplotlib import pyplot as plt

img = cv2.imread('messi5.jpg',0)
img2 = img.copy()
template = cv2.imread('template.jpg',0)
w, h = template.shape[::-1]

# All the 6 methods for comparison in a list
methods = ['cv2.TM_CCOEFF', 'cv2.TM_CCOEFF_NORMED', 'cv2.TM_CCORR',

'cv2.TM_CCORR_NORMED', 'cv2.TM_SQDIFF', 'cv2.TM_SQDIFF_NORMED']

for meth in methods:
? ? img = img2.copy()
? ? method = eval(meth)

? ? # Apply template Matching
? ? res = cv2.matchTemplate(img,template,method)
? ? min_val, max_val, min_loc, max_loc = cv2.minMaxLoc(res)

? ? # If the method is TM_SQDIFF or TM_SQDIFF_NORMED, take minimum
? ? if method in [cv2.TM_SQDIFF, cv2.TM_SQDIFF_NORMED]:
? ? ? ? top_left = min_loc
? ? else:
? ? ? ? top_left = max_loc
? ? bottom_right = (top_left[0] + w, top_left[1] + h)

? ? cv2.rectangle(img,top_left, bottom_right, 255, 2)
? ?
? ? plt.subplot(121),plt.imshow(res,cmap = 'gray')
? ? plt.title('Matching Result'), plt.xticks([]), plt.yticks([])
? ? plt.subplot(122),plt.imshow(img,cmap = 'gray')
? ? plt.title('Detected Point'), plt.xticks([]), plt.yticks([])
? ? plt.suptitle(meth)
? ? plt.show()

·cv2.TM_CCOEFF

·cv2.TM_CCOEFF_NORMED

·cv2.TM_CCORR

cv2.TM_CCORR_NORMED

cv2.TM_SQDIFF

cv2.TM_SQDIFF_NORMED

你可以看到cv2.TM_CCORR的結(jié)果不是我們想要的。

模板匹配多個目標

在前面我們搜索了messi的臉兽掰,目標只在圖像里出現(xiàn)了一次芭碍,假設(shè)你要搜的東西在圖像里出現(xiàn)多次,cv2.minMaxLoc()不會給你所有的位置孽尽。在這種情況下窖壕,我們會使用閾值,在這個例子里杉女,我們使用超級瑪麗的截圖來找金幣瞻讽。

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('mario_coin.png',0)
w, h = template.shape[::-1]

res = cv2.matchTemplate(img_gray,template,cv2.TM_CCOEFF_NORMED)
threshold = 0.8
loc = np.where( res >= threshold)
for pt in zip(*loc[::-1]):
? ? cv2.rectangle(img_rgb, pt, (pt[0] + w, pt[1] + h), (0,0,255), 2)

cv2.imwrite('res.png',img_rgb)

結(jié)果:

END

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市熏挎,隨后出現(xiàn)的幾起案子卸夕,更是在濱河造成了極大的恐慌,老刑警劉巖婆瓜,帶你破解...
    沈念sama閱讀 211,561評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件快集,死亡現(xiàn)場離奇詭異,居然都是意外死亡廉白,警方通過查閱死者的電腦和手機个初,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,218評論 3 385
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來猴蹂,“玉大人院溺,你說我怎么就攤上這事“跚幔” “怎么了珍逸?”我有些...
    開封第一講書人閱讀 157,162評論 0 348
  • 文/不壞的土叔 我叫張陵逐虚,是天一觀的道長。 經(jīng)常有香客問我谆膳,道長叭爱,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,470評論 1 283
  • 正文 為了忘掉前任漱病,我火速辦了婚禮买雾,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘杨帽。我一直安慰自己漓穿,他們只是感情好,可當我...
    茶點故事閱讀 65,550評論 6 385
  • 文/花漫 我一把揭開白布注盈。 她就那樣靜靜地躺著晃危,像睡著了一般。 火紅的嫁衣襯著肌膚如雪老客。 梳的紋絲不亂的頭發(fā)上僚饭,一...
    開封第一講書人閱讀 49,806評論 1 290
  • 那天,我揣著相機與錄音沿量,去河邊找鬼。 笑死冤荆,一個胖子當著我的面吹牛朴则,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播钓简,決...
    沈念sama閱讀 38,951評論 3 407
  • 文/蒼蘭香墨 我猛地睜開眼乌妒,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了外邓?” 一聲冷哼從身側(cè)響起撤蚊,我...
    開封第一講書人閱讀 37,712評論 0 266
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎损话,沒想到半個月后侦啸,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,166評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡丧枪,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,510評論 2 327
  • 正文 我和宋清朗相戀三年光涂,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片拧烦。...
    茶點故事閱讀 38,643評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡忘闻,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出恋博,到底是詐尸還是另有隱情齐佳,我是刑警寧澤私恬,帶...
    沈念sama閱讀 34,306評論 4 330
  • 正文 年R本政府宣布,位于F島的核電站炼吴,受9級特大地震影響本鸣,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜缺厉,卻給世界環(huán)境...
    茶點故事閱讀 39,930評論 3 313
  • 文/蒙蒙 一永高、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧提针,春花似錦命爬、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,745評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至嗜价,卻和暖如春艇抠,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背久锥。 一陣腳步聲響...
    開封第一講書人閱讀 31,983評論 1 266
  • 我被黑心中介騙來泰國打工家淤, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人瑟由。 一個月前我還...
    沈念sama閱讀 46,351評論 2 360
  • 正文 我出身青樓絮重,卻偏偏與公主長得像,于是被迫代替她去往敵國和親歹苦。 傳聞我的和親對象是個殘疾皇子青伤,可洞房花燭夜當晚...
    茶點故事閱讀 43,509評論 2 348

推薦閱讀更多精彩內(nèi)容