본문으로 바로가기
728x90

예제

 

사용한 템플릿 이미지와 소스 이미지

 

dino.png
bg.png

 

 

예제 코드입니다.

import os
import cv2
import numpy as np

src_path = os.path.join('img', 'bg.png')
tpl_path = os.path.join('img', 'dino.png')

src = cv2.imread(src_path, cv2.IMREAD_GRAYSCALE)
tpl = cv2.imread(tpl_path, cv2.IMREAD_GRAYSCALE)

res = cv2.matchTemplate(src, tpl, cv2.TM_CCOEFF_NORMED)

minval, maxval, minloc, maxloc = cv2.minMaxLoc(res)

h, w = tpl.shape[:2]

dst = cv2.cvtColor(src, cv2.COLOR_GRAY2BGR)
cv2.rectangle(dst, maxloc, (maxloc[0] + w, maxloc[1] + h), (0, 255, 0), 3)

tpl = cv2.resize(tpl, None, fx=2, fy=2)
cv2.imshow('tpl', tpl)
cv2.imshow('dst', dst)

cv2.waitKey()
cv2.destroyAllWindows()

 

 

cv2.matchTemplate(src, template, method, result=None, mask=None) -> result

  • src: 입력 이미지

  • template: 템플릿 이미지

  • method: 템플릿 비교 방법

  • result: 비교 결과 행렬(numpy.ndarray)

 

템플릿 매칭을 통해 나온 결과를 이용해서

사각형을 그리기 위한 시작점 좌표를 구합니다.

maxloc 이 시작점 좌표

res = cv2.matchTemplate(src, tpl, cv2.TM_CCOEFF_NORMED)
minval, maxval, minloc, maxloc = cv2.minMaxLoc(res)

 

cv2.rectangle() 함수는 시작점과 끝점을 인자로 받습니다.

템플릿 이미지의 Shape 와 위에서 구한 시작점 좌표를 이용해서 끝점 좌표까지 구해서 그려줍니다.

h, w = tpl.shape[:2]

dst = cv2.cvtColor(src, cv2.COLOR_GRAY2BGR)
cv2.rectangle(dst, maxloc, (maxloc[0] + w, maxloc[1] + h), (0, 255, 0), 3)