매칭이란 작은 템플릿 이미지가 전체 이미지를 돌면서 가장 유사한 부분을 찾는 것을 말한다.
- 템플릿 이미지
- 전체 이미지
- 코드
import numpy as np import cv2 img = cv2.imread("ori.jpg") imgray = cv2.cvtColor(img, cv2.COLOR_RGB2GRAY) w, h = imgray.shape[:2] templ = cv2.imread("templ.jpg", cv2.IMREAD_GRAYSCALE) templ_h, templ_w = templ.shape[:2] res = cv2.matchTemplate(imgray, templ, cv2.TM_CCOEFF_NORMED) loc = np.where(res >= 0.5) for pt in zip(*loc[::-1]): cv2.rectangle(img, pt, (pt[0] + w, pt[1] + h), (0, 0, 255), 2) cv2.imshow("res",img) cv2.waitKey(0)
- 코드 분석
res = cv2.matchTemplate(imgray, templ, cv2.TM_CCOEFF_NORMED)
- cv2.TM_CCOEFF_NORMED : 유사도를 구하는 방식을 정한다. (여러 방식이 있지만 이 방법이 좋은듯 하다.) -> 0 ~ 1
loc = np.where(res >= 0.5)
- 유사도가 0.5이상인 부분만 남긴다.
for pt in zip(*loc[::-1]):
cv2.rectangle(img, pt, (pt[0] + w, pt[1] + h), (0, 0, 255), 2)
- 유사도가 0.5이상인 부분을 빨간색 사각형으로 표시한다.
- 사용 하고 느낀점
템플릿 매칭할때 템플릿은 최소한의 특성만 가지는 사진이여야 한다.
하지만 이 때문에 너무 적은 특징을 가진다면 여러 사각형을 그리게 되는 문제가 발생한다.
-> 즉, 적절한 템플릿과, 유사도(0.5)를 설정해야한다.
'IT > 영상 처리' 카테고리의 다른 글
[Python_OpenCV] 모폴로지 연산 (morphology) (0) | 2018.09.08 |
---|---|
[Python_OpenCV] Gaussian, Bilateral, Median flter (0) | 2018.09.06 |
[Python_OpenCV] 지정경로에서 이미지 파일 읽어오기 (0) | 2018.08.08 |
[Python_OpenCV] Feature Matching (이미지 특성 매칭) (0) | 2018.07.22 |
[Python_OpenCV] K-Clustering (0) | 2018.07.21 |