스터디그룹/OpenCv

템플릿 매칭

호박공장 공장장 2020. 5. 3. 15:39

hats.png

 

hat.png

템플릿 매칭 원본 이미지 에서 템플릿 이미지와 일치하는 영역을 찾는 알고리즘이다.

 

<code>

import cv2

src = cv2.imread("hats.png", cv2.IMREAD_GRAYSCALE)

templit = cv2.imread("hat.png", cv2.IMREAD_GRAYSCALE)

dst = cv2.imread("hats.png")

 

result = cv2.matchTemplate(src, templit, cv2.TM_SQDIFF_NORMED)

 

minVal, maxVal, minLoc, maxLoc = cv2.minMaxLoc(result)

x, y = minLoc

h, w = templit.shape

 

dst = cv2.rectangle(dst, (x, y), (x + w, y + h) , (0, 0, 255), 1)

cv2..imshow("dst", dst)

cv2..waitKey(0)

cv2..destroyAllWindows()

 

결과 이미지

<설명>

src = cv2.imread("hats.png", cv2.IMREAD_GRAYSCALE)

templit = cv2.imread("hat.png", cv2.IMREAD_GRAYSCALE)

dst = cv2.imread("hats.png")

 

src(원본 이미지)를 선언한다.

templit(템플릿 이미지)를 선언한다.

dst(결과 이미지)를 선언한다.

 

result = cv2.matchTemplate(src, templit, cv2.TM_SQDIFF_NORMED)

cv2.matchTemplate은 템플릿과 유사한 이미지 영역을 찾기위해 이용 된다.

 

minVal, maxVal, minLoc, maxLoc = cv2.minMaxLoc(result)

x, y = minLoc

h, w = templit.shape

최소/최대 위치 함수 cv2.minMaxLoc로 검출값을 찾는다.

minLoc(최소값),maxLoc(최대값)에 위치한다.

 

dst = cv2.rectangle(dst, (x, y), (x + w, y + h) , (0, 0, 255), 1)

결과 dst(결과 이미지)를 표시한다.

 

템플릿 매칭의 단점은 이미지를 회전하면 이미지를 못 찾는다.

 

canny edge를 더 공부해야겠다...

 

작성자: 정혜리