Python에서 OpenCV를 사용한 템플릿 매칭
Python의 opencv
라이브러리는 많은 기술과 알고리즘을 구현합니다. 이 라이브러리를 사용하여 다양한 Computer Vision 및 AI 작업을 수행할 수 있습니다.
이 라이브러리의 이러한 기능 중 하나는 템플릿 일치입니다.
이 기술에 대해 자세히 설명하겠습니다. 템플릿 매칭은 이미지의 작은 부분이 다른 이미지의 일부인지 여부를 확인하는 것입니다.
템플릿의 가장 가능성 있는 위치를 찾기 위해 이 작은 부분(템플릿이라고도 함)을 이미지 위로 가로 및 세로로 이동합니다. opencv
를 사용한 템플릿 매칭은 특히 객체 감지와 같은 많은 실제 응용 프로그램을 가지고 있습니다.
이 튜토리얼은 Python에서 opencv
를 사용하여 템플릿 일치를 수행하는 방법을 보여줍니다.
matchTemplate()
함수를 사용하여 Python에서 OpenCV를 사용하여 템플릿 일치 수행
matchTemplate()
함수는 이미지에서 주어진 템플릿의 위치를 찾는 데 사용할 수 있습니다. 두 이미지를 모두 이 함수에 전달할 수 있습니다. 그러면 템플릿이 양방향으로 슬라이드되어 가장 일치하는 위치를 찾을 수 있습니다.
각 위치의 픽셀 밀도가 계산되며 가장 높은 밀도(밝은 픽셀)가 일치할 가능성이 가장 높습니다. matchTemplate()
은 여러 메소드를 사용하며 method
매개변수를 사용하여 지정됩니다.
총 6개가 있습니다: TM_CCOEFF
, TM_CCOEFF_NORMED
, TM_CCORR
, TM_CCORR_NORMED
, TM_SQDIFF
및 TM_SQDIFF_NORMED
.
TM_CCORR
은 부정확한 결과로 인해 좋은 선택으로 간주되지 않습니다. 기억해야 할 또 다른 사항은 TM_SQDIFF
및 TM_SQDIFF_NORMED
메서드의 경우 최소값을 선택한다는 것입니다.
이것은 아래의 예를 보면 명확해질 것입니다.
이제 이 기능에 대해 자세히 논의했으므로 실제 예제를 살펴보겠습니다. 템플릿과 전체 이미지가 아래에 표시되고 그 뒤에 코드와 결과가 표시됩니다.
영상:
주형:
import cv2
i = cv2.imread("deftstack.png")
img = cv2.cvtColor(i, cv2.COLOR_BGR2GRAY)
temp = cv2.imread("temp.png", 0)
width, height = temp.shape[::-1]
result = cv2.matchTemplate(img, temp, cv2.TM_CCOEFF)
val_min, val_max, min_loc, max_loc = cv2.minMaxLoc(result)
t_left = max_loc
b_right = (t_left[0] + width, t_left[1] + height)
cv2.rectangle(i, t_left, b_right, 255, 2)
cv2.imshow("Output", i)
cv2.waitKey(0)
cv2.destroyAllWindows()
출력:
이제 코드에 대해 자세히 논의해 보겠습니다. 필요한 이미지를 읽는 것으로 시작합니다.
cvtColor()
함수를 사용하여 이 이미지를 회색조로 변환하여 이미지를 필요한 색상 공간으로 변환합니다. 흑백 이미지가 최상의 결과를 제공합니다.
템플릿과 이미지를 TM_CCOEFF
메소드와 함께 matchTemplate()
함수에 전달합니다.
이것은 numpy
배열을 반환합니다. 좌표를 찾으려면 이 배열의 값 집합이 필요합니다.
minMaxLoc()
함수는 배열의 최소값 및 최대값과 해당 인덱스를 찾습니다. 가장 일치하는 좌표를 계산하기 위해 최대값의 위치를 사용합니다.
rectangle()
함수를 사용하여 일치하는 부분 위에 직사각형을 그립니다. 그러면 이미지가 결과와 함께 표시됩니다.
waitKey()
및 destroyAllWindows()
함수는 출력 창이 자동으로 닫히는 것을 방지하고 일부 사용자 입력을 기다립니다.
논의한 바와 같이 matchTemplate()
함수 내에서 논의된 다른 방법을 유사하게 사용할 수 있습니다. 유일한 차이점은 TM_SQDIFF
및 TM_SQDIFF_NORMED
방법과 관련이 있다는 것입니다.
코드를 약간 수정하여 사용할 수 있습니다. 다음 예를 참조하십시오.
import cv2
i = cv2.imread("deftstack.png")
img = cv2.cvtColor(i, cv2.COLOR_BGR2GRAY)
temp = cv2.imread("temp.png", 0)
width, height = temp.shape[::-1]
result = cv2.matchTemplate(img, temp, cv2.TM_SQDIFF)
val_min, val_max, min_loc, max_loc = cv2.minMaxLoc(result)
t_left = min_loc
b_right = (t_left[0] + width, t_left[1] + height)
cv2.rectangle(i, t_left, b_right, 255, 2)
cv2.imshow("Output", i)
cv2.waitKey(0)
cv2.destroyAllWindows()
출력:
위의 예는 최소값 인덱스를 사용하여 템플릿 좌표를 계산하는 것을 보여줍니다. 나머지 코드는 동일하게 유지됩니다.
결론
이 튜토리얼은 파이썬에서 opencv
를 사용한 템플릿 매칭 기법을 보여주었습니다. 템플릿 매칭의 기본과 이 기술을 구현하는 opencv
라이브러리의 기능에 대해 논의했습니다.
기능과 관련된 몇 가지 방법도 논의되었습니다. 우리는 이 기능과 다른 여러 기능을 사용하여 이 기술의 실제 작동 예를 보았습니다.
각 라인의 목적을 강조하여 자세히 논의했습니다.
Manav is a IT Professional who has a lot of experience as a core developer in many live projects. He is an avid learner who enjoys learning new things and sharing his findings whenever possible.
LinkedIn