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



所有评论(0)