天天看點

OpenCV與圖像處理學習十六——模闆比對一、模闆比對介紹二、代碼應用

OpenCV與圖像處理學習十六——模闆比對

  • 一、模闆比對介紹
  • 二、代碼應用

一、模闆比對介紹

模闆比對是一種最原始、最基本的模式識别方法,研究某一特定目标的圖像位于圖像的什麼地方,進而對圖像進行定位。

在待檢測的圖像上,從左到右,從上到下計算模闆圖像與重疊子圖像的比對度,比對程度越大,兩者相同的可能性越大。

OpenCV與圖像處理學習十六——模闆比對一、模闆比對介紹二、代碼應用

二、代碼應用

OpenCV中的函數:

參數如下所示:

  1. image:待搜尋的原圖,必須是灰階圖或4通道圖。
  2. templ:模闆圖像,必須不大于原圖像并具有相同的資料類型。
  3. method:表示計算比對程度的方法。
    OpenCV與圖像處理學習十六——模闆比對一、模闆比對介紹二、代碼應用

    TM_SQDIFF_NORMED是标準平方差比對,通過計算兩圖之間平方差來進行比對,最好比對為0,比對越差,比對值越大。

    TM_CCORR_NORMED是标準相關性比對,采用模闆和圖像間的乘法操作,數越大表示比對程度越高,0表示最壞的比對效果,這種方法除了亮度線性變化對相似度計算的影響。

    TM_CCOEFF_NORMED是标準相關性系數比對,兩圖減去各自的平均值之外,還要各自除以各自的方差。将模闆對其均值的相對值與圖像對其均值的相關值進行比對,1表示完美比對,-1表示糟糕的比對,0表示沒有任何相關性(随機序列)。

擷取相關性最大最小值及其位置的函數:

參數如下所示:

OpenCV與圖像處理學習十六——模闆比對一、模闆比對介紹二、代碼應用

即傳回最大值及其位置、最小值及其位置。

看個例子:

# 模闆比對
import cv2
import numpy as np

def template_demo(tpl, target):
    methods = [cv2.TM_SQDIFF_NORMED, cv2.TM_CCORR_NORMED, cv2.TM_CCOEFF_NORMED]  # 3種模闆比對方法
    th, tw = tpl.shape[:2]
    for md in methods:
        # print(md)
        result = cv2.matchTemplate(target, tpl, md)
        # print(result.shape)
        min_val, max_val, min_loc, max_loc = cv2.minMaxLoc(result)
        print(min_val, max_val, min_loc, max_loc)
        # 找比對效果最好的位置,TM_SQDIFF_NORMED方法值越小越好,另外兩種越大越好
        if md == cv2.TM_SQDIFF_NORMED:
            tl = min_loc
        else:
            tl = max_loc
        br = (tl[0] + tw, tl[1] + th)  # br是矩形右下角的點的坐标
        cv2.rectangle(target, tl, br, (0, 0, 255), 2)
        cv2.namedWindow("match-" + np.str(md), cv2.WINDOW_NORMAL)
        cv2.imshow("match-" + np.str(md), target)

tpl = cv2.imread("image/sample2.jpg")
print(tpl.shape)
target = cv2.imread("image/target1.jpg")
print(target.shape)
cv2.waitKey(0)
cv2.destroyAllWindows()

cv2.namedWindow('template image', cv2.WINDOW_NORMAL)
cv2.imshow("template image", tpl)
cv2.namedWindow('target image', cv2.WINDOW_NORMAL)
cv2.imshow("target image", target)
template_demo(tpl, target)
cv2.waitKey(0)
cv2.destroyAllWindows()
           

模闆和待比對的圖如下所示:

OpenCV與圖像處理學習十六——模闆比對一、模闆比對介紹二、代碼應用

三種比對方法的效果如下所示:

cv2.TM_SQDIFF_NORMED:

OpenCV與圖像處理學習十六——模闆比對一、模闆比對介紹二、代碼應用

cv2.TM_CCORR_NORMED:

OpenCV與圖像處理學習十六——模闆比對一、模闆比對介紹二、代碼應用

cv2.TM_CCOEFF_NORMED:

OpenCV與圖像處理學習十六——模闆比對一、模闆比對介紹二、代碼應用

都是可以很好的比對上,但是這裡是比對度很高時的一個例子,如果模闆的比對度沒那麼高,這種方法的效果就會打折扣。

繼續閱讀