[오토핫키] 이미지 서치 (ImageSearch) 화면에서 특정 이미지 찾기

2024. 9. 9. 00:34오토핫키 초급

 

이미지 서치 (ImageSearch) 이용하여 화면에서 특정 이미지를 찾을 수 있고 이를 응용하여 다양하게 활용 할 수 있습니다.


ImageSearch로 이미지를 찾으려하는데 이미지가 정상적으로 찾아지지 않나요?

오토핫키(AutoHotkey)에서 이미지 서치 기능을 사용할 때 이미지가 잘 찾아지지 않는 경우, 몇 가지 문제 해결 방법을 시도해 볼 수 있습니다.

1. 이미지 해상도 및 크기 확인: 이미지가 너무 크거나 해상도가 맞지 않으면 검색이 제대로 되지 않을 수 있습니다. 스크린샷을 다시 캡처하여 해상도와 크기를 조정해 보세요.

2. 이미지의 정확성: 이미지가 검색하려는 대상과 정확히 일치하는지 확인하세요. 약간의 차이만 있어도 검색이 실패할 수 있습니다.

3. 색상 및 투명도 확인: 이미지에 투명한 부분이 있거나 색상이 다르게 보일 수 있습니다. 이미지를 편집하여 배경색을 일치시키거나 투명도를 제거해 보세요.

4. 스크립트의 좌표 및 영역 확인: 이미지 검색을 수행할 영역이 올바르게 설정되어 있는지 확인하세요. 영역이 잘못 설정되어 있으면 이미지 검색이 실패할 수 있습니다.

5. 픽셀 검색 방법 변경: ImageSearch 함수의 옵션을 조정하여 픽셀 검색 방법을 변경해 보세요. 예를 들어, 색상 변동을 허용하는 옵션을 사용할 수 있습니다.

6. 이미지 파일 경로 확인: 이미지 파일의 경로가 올바르게 지정되어 있는지 확인하세요.

7. 스크립트 디버깅: 스크립트를 단계별로 디버깅하여 어느 부분에서 문제가 발생하는지 확인해 보세요.

8. 오토핫키 버전 확인: 사용 중인 오토핫키 버전이 최신인지 확인하고, 필요하다면 업데이트하세요.

 


예를 들어, ImageSearch를 사용하는 기본적인 코드 예시는 다음과 같습니다.

예제 스크립트
CoordMode, Pixel, Screen  ; 픽셀 좌표 모드를 화면 기준으로 설정
CoordMode, Mouse, Screen  ; 마우스 좌표 모드를 화면 기준으로 설정

; 이미지 검색 수행
ImageSearch, FoundX, FoundY, 0, 0, A_ScreenWidth, A_ScreenHeight, *50 image.png

if (ErrorLevel = 0)
{
    ; 이미지가 성공적으로 발견된 경우
    MsgBox, Image found at %FoundX%x%FoundY%.
}
else if (ErrorLevel = 1)
{
    ; 이미지가 발견되지 않은 경우
    MsgBox, Image not found.
}
else if (ErrorLevel = 2)
{
    ; 검색 중 오류가 발생한 경우 (예: 파일이 존재하지 않음)
    MsgBox, An error occurred during the search.
}

 

위 코드에서 *50은 색상 값이 최대 50단위까지 변동하는 것을 허용하겠다는 의미입니다. 이는 RGB 색상 모델에서 각 채널(R, G, B)이 0에서 255까지의 값을 가질 수 있기 때문에, 각 채널의 값이 최대 50까지 차이가 나도 동일한 색상으로 간주하게 됩니다.

*고려사항

1.허용치 설정: 너무 높은 허용치를 설정하면 원하지 않는 이미지도 매치될 수 있습니다. 따라서 적절한 값을 설정하는 것이 중요합니다.

2.성능: 허용치를 높이면 검색 범위가 넓어지므로, 검색 속도가 느려질 수 있습니다.

3.테스트: 여러 허용치를 테스트하여 최적의 값을 찾아보세요. 화면의 색상 변화나 이미지의 특성을 고려하여 조정합니다.

 

색상 변동 허용치는 이미지가 약간 다르더라도 검색이 가능하도록 해주는 유용한 옵션이지만, 상황에 맞게 적절히 조정하는 것이 중요합니다.

 


 


오토핫키에서 ImageSearch 명령어를 사용할 때 유용하고 효율적인 방법은 여러 가지가 있습니다.
아래에 몇 가지 팁과 함께 예제 스크립트를 소개하겠습니다.

유용한 팁
1.검색 영역 최소화: 전체 화면 대신 특정 영역을 지정하여 검색하면 성능이 향상됩니다. 가능한 한 최소한의 영역으로 검색 범위를 제한하세요.
2.이미지 해상도 및 크기 최적화: 필요한 해상도와 크기로 이미지를 준비하세요. 너무 큰 이미지는 검색 속도를 저하시킬 수 있습니다.
3.색상 변동 허용치 사용: 화면의 색상 차이에 대응하기 위해 적절한 색상 변동 허용치를 설정합니다. 그러나 너무 높게 설정하면 잘못된 매칭이 발생할 수 있습니다.
4.좌표 모드 설정: CoordMode를 적절히 설정하여 스크립트의 동작이 화면 좌표에 기반하도록 합니다.
5.반복 및 대기 시간 사용: 이미지가 즉시 나타나지 않을 수 있으므로, 반복 및 대기 시간을 설정하여 일정 시간 동안 이미지를 찾도록 합니다.


예제 스크립트
CoordMode, Pixel, Screen  ; 픽셀 좌표 모드를 화면 기준으로 설정
CoordMode, Mouse, Screen  ; 마우스 좌표 모드를 화면 기준으로 설정

; 이미지 검색을 위한 함수
FindImage(imagePath, x1, y1, x2, y2, tolerance := 50, attempts := 10, delay := 100) {
    Loop, %attempts%
    {
        ImageSearch, FoundX, FoundY, x1, y1, x2, y2, *%tolerance% %imagePath%
        if (ErrorLevel = 0)
        {
            ; 이미지가 발견되면 좌표 반환
            return {x: FoundX, y: FoundY}
        }
        Sleep, delay  ; 각 시도 사이에 대기
    }
    ; 이미지가 발견되지 않으면 빈 객체 반환
    return {}
}

; 예제 사용
result := FindImage("image.png", 0, 0, A_ScreenWidth, A_ScreenHeight)

if (result)
{
    MsgBox, Image found at %result.x%x%result.y%.
}
else
{
    MsgBox, Image not found after several attempts.
}

 

 

FindImage 함수: 이 함수는 이미지 검색을 여러 번 시도하며, 각 시도 사이에 대기 시간을 둡니다. 검색 영역과 색상 변동 허용치, 시도 횟수, 대기 시간을 매개변수로 받습니다.
반복 및 대기: 여러 번 검색을 시도하며, 각 시도 사이에 delay 만큼 대기합니다. 이는 이미지가 나중에 나타나는 경우에 유용합니다.
검색 결과 처리: 이미지가 발견되면 좌표를 반환하고, 발견되지 않으면 빈 객체를 반환합니다.
이 스크립트는 이미지 검색을 보다 효율적으로 수행할 수 있도록 도와줍니다. 필요에 따라 매개변수를 조정하여 다양한 상황에 맞게 사용할 수 있습니다.

 

 

 

검은망치 카카오톡 오픈채팅방 : https://open.kakao.com/o/sDUaoCNg

 

[오토핫키] 검은망치님의 오픈프로필

오토핫키 개발러

open.kakao.com