python-opencv 图像处理基础 (六)图像模板匹配

1、模板匹配
#模板匹配就是在整个图像区域发现与给定子图像匹配的小块区域
#所以模板匹配首先需要一个模板图像T(给定的子图像)
#另外需要一个待检测的图像----源图像
#工作方法,在待检测图像上,从左到右,从上向下计算模板图像与重叠子图像的匹配度,匹配程度越大,两者相同的可能性越大。

#--------------------------模板匹配-------------------------
# 匹配方法:
# 差值平方和匹配:CV_TM_SQDIFF
# 标准化差值平方和匹配:CV_TM_SQDIFF_NORMED
# 相关匹配:CV_TM_CCORR
# 标准相关匹配:CV_TM_CCORR_NORMED
# 相关匹配:CV_TM_CCOEFF
# 标准相关匹配:CV_TM_CCOEFF_NORMED


import cv2
import numpy as np


def template_demo():
	tpl=cv2.imread('../opencv-python-img/roi.jpg')
	target=cv2.imread('../opencv-python-img/target.jpg')
	methods=[cv2.TM_SQDIFF_NORMED,cv2.TM_CCORR_NORMED,cv2.TM_CCOEFF_NORMED]
	th,tw=tpl.shape[:2]
	print(methods)
	for md in methods:
		print(methods)
		print('md',md)
		result=cv2.matchTemplate(target,tpl,md)
		min_val,max_val,min_loc,max_loc=cv2.minMaxLoc(result)
		if md==cv2.TM_SQDIFF_NORMED:
			tl=min_loc
		else:
			tl=max_loc
		br=(tl[0]+tw,tl[1]+th)
		cv2.rectangle(target,tl,br,(0,0,255),2)
		#cv2.imshow('match-'+np.str(md),result)
		cv2.imshow('match-'+np.str(md),target)



if __name__ == '__main__':
	template_demo()

	cv2.waitKey(0)

猜你喜欢

转载自blog.csdn.net/zml194849/article/details/123395197