1. 程式人生 > >Python3與OpenCV3.3 影象處理(十四)--模板匹配

Python3與OpenCV3.3 影象處理(十四)--模板匹配

一、什麼是模板匹配

在整個影象區域發現與給定子影象匹配的區域,模板匹配的工作方式是在待檢測影象上從左到右,從上到下計算模板圖象與重疊子影象的匹配度,匹配度越大,兩者越相同

二、OpenCV中的模板匹配

CV_TM_SQDIFF 平方差匹配法:該方法採用平方差來進行匹配;最好的匹配值為0;匹配越差,匹配值越大。
CV_TM_CCORR 相關匹配法:該方法採用乘法操作;數值越大表明匹配程度越好。
CV_TM_CCOEFF 相關係數匹配法:1表示完美的匹配;-1表示最差的匹配。
CV_TM_SQDIFF_NORMED 歸一化平方差匹配法
CV_TM_CCORR_NORMED 歸一化相關匹配法
CV_TM_CCOEFF_NORMED 歸一化相關係數匹配法

三、示例程式碼

import cv2 as cv
import numpy as np


def template():
    #模板圖片
    tpl=cv.imread('12tem.jpg')
    #目標圖片
    target=cv.imread('12.jpg')
    cv.imshow('template',tpl)
    cv.imshow('target',target)

    methods=[cv.TM_SQDIFF_NORMED,cv.TM_CCORR_NORMED,cv.TM_CCOEFF_NORMED]

    #獲得模板的高寬
    th,tw=tpl.shape[:2]
    for md in methods:

        #執行模板匹配
        #target:目標圖片
        #tpl:模板圖片
        #匹配模式
        result=cv.matchTemplate(target,tpl,md)
        #尋找矩陣(一維陣列當作向量,用Mat定義) 中最小值和最大值的位置
        min_val,max_val,min_loc,max_loc=cv.minMaxLoc(result)
        if md==cv.TM_SQDIFF_NORMED:
            tl=min_loc
        else:
            tl=max_loc

        br=(tl[0]+tw,tl[1]+th)
        #繪製矩形邊框,將匹配區域標註出來
        #target:目標影象
        #tl:矩形定點
        #br:舉行的寬高
        #(0,0,255):矩形邊框顏色
        #2:矩形邊框大小
        cv.rectangle(target,tl,br,(0,0,255),2)
        cv.imshow('match-'+np.str(md),target)


template();

cv.waitKey(0)
cv.destroyAllWindows()

覺得不錯打賞一下