매크로

조회 수 3090 추천 12 댓글 65

템플릿 매칭이란?





El54A2y.png


템플릿 매칭이란 OpenCV의 함수중의 하나로, 이미지에서 템플릿 이미지와 유사한 영역을 찾아내는 방법으로, 

템플릿 이미지를 입력 이미지에서 이동시켜가면서 템플릿 이미지와 일치, 혹은 유사한 영역을 검출합니다.

 

이는 오토핫키의 이미지서치와 비슷해보이지만, 여러가지 차이점이 있습니다.

오토핫키의 이미지 서치는 검색 이미지와 완벽히 1대1로 매치되는 이미지를 검색하며, 조금이라도 픽셀값이 다르거나 하면 이미지를 검출해내지 못합니다.

 

그에 반해 템플릿 매칭은 이미지가 완벽히 1대1로 매치되지 않더라도, 비슷한 이미지를 검출해 내는것이 가능합니다.

Ih6LAKX.png

SbRGoKs.png

이러한 차이점 때문에 두가지 이미지 대조방식을 상황에 따라 적절히 사용하면 보다 높은 활용성을 얻을 수 있습니다.

 

OpenCV의 템플릿 매칭 함수는 총 6가지의 Method를 제공합니다.

 

1. TM_SQDIFF

2. TM_SQDIFF_NORMED

3. TM_CCORR

4. TM_CCORR_NORMED

5. TM_CCOEFF

6. TM_CCOEFF_NORMED

[참조 : https://docs.opencv.org/master/d4/dc6/tutorial_py_template_matching.html]

 

 

라이브러리 함수


기본적으로 OpenCV에서는 오토핫키를 위한 모듈을 따로 지원하진 않지만, 오토핫키에서 또한 DllCall을 이용해 사용이 가능합니다.

제작된 라이브러리 사용 환경은 AutoHotkey 32bit, 64bit / Window 10 입니다. [2020 09 02 업데이트]

Window 7 의 경우, Visual C++ Redistributable 패키지를 설치하시면 이용이 가능합니다

 

라이브러리의 함수는 다음과 같습니다.

1. TemplateMatch(ByRef Out_X, ByRef Out_Y, Find_X1, Find_Y1, Find_X2, Find_Y2, SearchImage, Method)

    : 전체 화면으로 부터 단일 이미지를 검색합니다

2. MultiTemplateMatch(Find_X1, Find_Y1, Find_X2, Find_Y2, Threshold, SearchImage, Method)

    : 전체 화면으로 부터 다중 이미지를 검색합니다

3. TemplateMatchFromImage(InputImage, SearchImage, ByRef Out_X, ByRef Out_Y, Method)

    : 이미지파일로 부터 단일 이미지를 검색합니다

4. MultiTemplateMatchFromImage(InputImage, SearchImage, Threshold, Method)

    : 이미지파일로 부터 다중 이미지를 검색합니다

5. TemplateMatchFromHWND(ByRef Out_X, ByRef Out_Y, HWND, SearchImage, Method)

    : HWND값으로 부터 단일 이미지를 검색합니다

6. MultiTemplateMatchFromHWND(HWND, Threshold, SearchImage, Method)

    : HWND값으로 부터 다중 이미지를 검색합니다


MaxVal := TemplateMatch(OutputVarX, OutputVarY, X1, Y1, X2, Y2, SearchImage [, Method])


MaxVal 

일치율을 반환합니다 Method에 따라 각기 다른 형태를 지닙니다


OutputVarX/Y 

화면에서 이미지가 발견된 X, Y 좌표를 저장할 변수의 이름


X1, Y1, X2, Y2 

검색을 진행할 범위


SearchImage 

검색할 이미지의 파일 이름. 경로를 지정하지 않으면 %A_WorkingDir% 에 있다고 간주합니다


Method 

검출하는 Method. 비워둘시 TM_SQDIFF Method를 채택합니다



OutputVarXY := MultiTemplateMatch(X1, Y1, X2, Y2, Threshold, SearchImage [, Method])


OutputVarXY 

이미지가 발견된 X, Y 좌표를 X1,Y1 (엔터) X2,Y2 (엔터) X3,Y3 ... 형식으로 반환합니다 추후 파싱을 필요


X1, Y1, X2, Y2 

검색을 진행할 범위


Threshold

이미지 검출시 검출의 임계값. Method에 따라 각기 다른 임계값을 적절히 사용해 주어야 합니다.

임계값을 너무 높게 설정해줄 경우 템플릿과 관련이 없는 이미지를 검출할 가능성이 높아지고, 

임계값을 너무 낮게 설정해줄 경우 일치하는 이미지를 검출하지 못할 수 있습니다


SearchImage 

검색할 이미지의 파일 이름. 경로를 지정하지 않으면 %A_WorkingDir% 에 있다고 간주합니다


Method 

검출하는 Method. 비워둘시 TM_SQDIFF Method를 채택합니다



MaxVal := TemplateMatchFromImage(InputImage, SearchImage, OutputVarX, OutputVarY [, Method])


MaxVal 

일치율을 반환합니다 Method에 따라 각기 다른 형태를 지닙니다


InputImage 

검색할 전체 이미지 파일 이름. 해당 이미지 파일에서 SearchImage 이미지를 검출합니다


SearchImage 

검색할 이미지의 파일 이름. 경로를 지정하지 않으면 %A_WorkingDir% 에 있다고 간주합니다


OutputVarX/Y 

화면에서 이미지가 발견된 X, Y 좌표를 저장할 변수의 이름


Method 

검출하는 Method. 비워둘시 TM_SQDIFF Method를 채택합니다



OutputVarXY := MultiTemplateMatchFromImage(InputImage, SearchImage, Threshold [, Method])


OutputVarXY 

이미지가 발견된 X, Y 좌표를 X1,Y1 (엔터) X2,Y2 (엔터) X3,Y3 ... 형식으로 반환합니다 추후 파싱을 필요


InputImage 

검색할 전체 이미지 파일 이름. 해당 이미지 파일에서 SearchImage 이미지를 검출합니다


SearchImage 

검색할 이미지의 파일 이름. 경로를 지정하지 않으면 %A_WorkingDir% 에 있다고 간주합니다


Threshold

이미지 검출시 검출의 임계값. Method에 따라 각기 다른 임계값을 적절히 사용해 주어야 합니다.

임계값을 너무 높게 설정해줄 경우 템플릿과 관련이 없는 이미지를 검출할 가능성이 높아지고, 

임계값을 너무 낮게 설정해줄 경우 일치하는 이미지를 검출하지 못할 수 있습니다


Method 

검출하는 Method. 비워둘시 TM_SQDIFF Method를 채택합니다



MaxVal := TemplateMatchFromHWND(OutputVarX, OutputVarY, HWND, SearchImage [, Method, X1, Y1, X2, Y2])


MaxVal 

일치율을 반환합니다 Method에 따라 각기 다른 형태를 지닙니다


OutputVarX/Y 

화면에서 이미지가 발견된 X, Y 좌표를 저장할 변수의 이름


HWND 

검색을 진행할 HWND값


SearchImage 

검색할 이미지의 파일 이름. 경로를 지정하지 않으면 %A_WorkingDir% 에 있다고 간주합니다


Method 

검출하는 Method. 비워둘시 TM_SQDIFF Method를 채택합니다


X1, Y1, X2, Y2 

검색을 진행할 범위. 비워둘시 해당 HWND전체로부터 검색합니다



OutputVarXY := MultiTemplateMatchFromHWND(HWND, Threshold, SearchImage [, Method, X1, Y1, X2, Y2])


OutputVarXY 

이미지가 발견된 X, Y 좌표를 X1,Y1 (엔터) X2,Y2 (엔터) X3,Y3 ... 형식으로 반환합니다 추후 파싱을 필요


HWND 

검색을 진행할 HWND값


Threshold

이미지 검출시 검출의 임계값. Method에 따라 각기 다른 임계값을 적절히 사용해 주어야 합니다.

임계값을 너무 높게 설정해줄 경우 템플릿과 관련이 없는 이미지를 검출할 가능성이 높아지고, 

임계값을 너무 낮게 설정해줄 경우 일치하는 이미지를 검출하지 못할 수 있습니다


SearchImage 

검색할 이미지의 파일 이름. 경로를 지정하지 않으면 %A_WorkingDir% 에 있다고 간주합니다


Method 

검출하는 Method. 비워둘시 TM_SQDIFF Method를 채택합니다


X1, Y1, X2, Y2 

검색을 진행할 범위. 비워둘시 해당 HWND전체로부터 검색합니다


라이브러리 파일


해당 라이브러리는 사용하시는 스크립트 파일과 함께

#Include TemplateMatch.ahk 를 스크립트 상단에 선언해주시고 사용하시고자 하시는 함수를 사용하시면 됩니다

32bit(x86) 버전과 64bit(x64) 버전 중 사용하시는 윈도우 버전 혹은 오토핫키 버전에 맞춰 다운로드하시면 됩니다

 

사용시 대략적인 예제를 폴더에 포함해 두었으니, 해당 예제로 테스트를 해보면서 익히면 이해에 도움이 됩니다

[2020 09 17 업데이트]

1. HWND값 좌표지정기능 추가

2. 메모리 누수 보안


AutoHotkey 32Bit(x86) 버전 : 

drive.google.com/file/d/1w59vqg67VVO1Z_ITW7ExGwyRcEVg0ucn/view?usp=sharing


AutoHotkey 64Bit(x64) 버전 :

drive.google.com/file/d/1WOB4g-IotubdtqJWyj9WfYdj9fbaYXuy/view?usp=sharing



List of Articles
제목 글쓴이 최근변경 추천
Edit 과 v레이블 2 민영123 2023.07.03 0/0
핫키 핫스프링 민영123 2021.09.23 0/0
send,sleep 의 개념 민영123 2021.09.22 0/0
Exitapp, return 민영123 2021.09.22 0/0
오토핫키 픽셀서치 3 민영123 2023.10.21 0/0
오토핫키 gui (1) 1 민영123 2022.02.20 0/0
오토핫키 OpenCV 템플릿매칭 라이브러리 65 CatLab 2023.10.21 12/0
아이템획득, 특정이벤트 발생 시 카톡으로 알림 55 dlslwl 2023.10.18 4/0
수정추가) 이미지 좌표 스크립트 + 픽셀 15 MaximM 2023.06.25 0/0
비활성 키입력 함수(가상키값 리스트화) 53 hersia 2023.07.20 1/0
랜덤좌표 스크립트 입니다. 78 sama 2023.11.04 3/0
특정확장자 삭제하기 21 여의도김매력 2022.12.14 2/0
화면안에서 마우스좌표 따기입니다. 109 MaximM 2023.11.04 2/0
MsgBox, InputBox 등을 통해 사용자 입력 받기 39 ferento 2023.10.21 1/0
오토핫키(AutoHotKey, AHK 또는 오핫키)는 무엇인가? ... 메테오 2015.12.23 0/0
함수 Function 에 대한 이해 279 예지력1 2023.07.21 23/0
코드 최적화 Code Optimization 124 예지력1 2022.12.14 23/0
코드의 속도, 성능을 높이는 한줄 팁 모음 189 예지력1 2023.06.24 20/0
오토핫키 반응형 학습 어플리케이션 308 예지력1 2023.02.05 40/0
[문법] Try, Catch 함수를 Try하고 예외를 Catch 한다 106 예지력1 2023.02.05 9/0
Board Pagination Prev 1 2 3 Next
/ 3

전체 최신 인기글

전체 주간 인기글