模板匹配:模板匹配是一种最原始、最基本的模式识别方法,研究某一特定对象物的图案位于图像的什么地方,进而识别对象物,这就是一个匹配问题。它是图像处理中最基本、最常用的匹配方法。模板匹配具有自身的局限性,主要表现在它只能进行平行移动,若原图像中的匹配目标发生旋转或大小变化,该算法无效。
工作方法:在待测的图像上,从左到右、从上到下计算模板图像与重叠子图像匹配度

import cv2 as cv
import numpy as np


def template_demo():
    tpl = cv.imread(r"C:\pics\samples\data\lena.jpg")  #模板图像
    target = cv.imread(r"‪C:\pics\samples\data\lena-1.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_loc
        else:
            tl = max_loc
        br = (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(r"‪C:\pics\samples\data\lena-1.png")
cv.namedWindow("input image", cv.WINDOW_AUTOSIZE)
cv.imshow("input image", src)
template_demo()
cv.waitKey(0)

cv.destroyAllWindows()

Logo

CSDN联合极客时间,共同打造面向开发者的精品内容学习社区,助力成长!

更多推荐