Doarchive

[OpenCV] Template Matching 본문

Computer Vision/ImageProcessing

[OpenCV] Template Matching

오순발닦개 2023. 4. 10. 11:50

 

 OpenCV Template Matching
원본 이미지 내에서 템플릿 이미지와 가장 유사한 이미지를 식별 

템플릿 이미지를 원본 이미지 위에 올리고  각 위치에서 유사성 메트릭을 계산하며.

유사성 메트릭은 템플릿이 원본 이미지의 해당 영역과 얼마나 잘 일치하는지 측정한다

템플릿 매칭을 위한 방법 (TM_CCOFF_NORMED 을 주로 사용함)

 

-cv2.TM_SQDIFF: 원본 이미지의 영역과 템플릿 간의 차이 제곱합을 유사성 메트릭으로 사용함. 점수가 작을수록 더 적합한것
-cv2.TM_SQDIFF_NORMED: TM_SQDIFF 와 유사함  결과는 0 ~ 1 범위로 정규화됨,  점수가 0인경우 완벽하게 매칭된것
-cv2.TM_CCORR:   템플릿과 원본 이미지의 영역 사이의 상관 계수를 유사성 메트릭으로 사용함 점수가 더 클수록 유사한것 

-cv2.TM_CCORR_NORMED:  TM_CCORR와 방법은 유사하나 ,결과는 0 ~ 1 범위로 정규화됨. 점수가 1인경우 완벽하게 매칭된것
-cv2.TM_CCOFF:  템플릿과 원본 이미지의 영역 평균 간의 상관 계수를 유사성 메트릭으로 사용. 점수가 클수록 더 적합함
-cv2.TM_CCOFF_NORMED:  TM_CCOFF, 방법은 유사하나 결과를 -1~1 범위로 정규화함 . 점수가 1인경우 완벽하게 매칭된것


 cv2.minMaxLoc() 함수를 사용하여 , 지정된 배열에서 최소값과 최대값의 위치를 반환한다.

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
import cv2
import numpy as np
 
 
filepath ='plate.bmp'
templatePath ='disp.tip.bmp'
 
 
# Load source and template images
source_image = cv2.imread(filepath)  # Load the source image
template_image = cv2.imread(templatePath)  # Load the template image
 
 
# Convert images to grayscale
source_gray = cv2.cvtColor(source_image, cv2.COLOR_BGR2GRAY)  # Convert the source image to grayscale
template_gray = cv2.cvtColor(template_image, cv2.COLOR_BGR2GRAY)  # Convert the template image to grayscale
 
 
# Perform Template Matching using the normalized cross-correlation method
match_result = cv2.matchTemplate(source_gray, template_gray, cv2.TM_CCOEFF_NORMED)  
 
 
# Find location of best match
min_val, max_val, min_loc, max_loc = cv2.minMaxLoc(match_result) 
 
# Draw a rectangle around the best match
template_width, template_height = template_gray.shape[::-1]  
top_left = max_loc  
bottom_right = (top_left[0+ template_width, top_left[1+ template_height)  
cv2.rectangle(source_image, top_left, bottom_right, (00255), 2)
 
 
# Show the source image with the best match highlighted
cv2.imshow('Result', source_image)  
cv2.waitKey(0)  # Wait for a key press
cv2.destroyAllWindows()  # Close all windows
cs

 

 

 

 

원본이미지  / 템플릿 이미지 

 

 

 

 

결과이미지

728x90