ImageCompare 명령어는 크기가 같은 두 이미지를 비교하는 명령어 입니다.

또한 이미지 비교값을 별도의 비트맵으로 출력 할 수도 있습니다.



ImageCompare , hBitmap1, hBitmap2, [hResultVar], [option]

 

[결과값]

ErrorLevel = 0 : 이미지동일

ErrorLevel = 1 : 이미지다름

ErrorLevel = 2 : 이미지오류 (이미지가 준비되지 않았거나 이미지 크기가 다를때 발생)

 

[옵션]

*HBmp1NotDel, *HBmp2NotDel : 기본적으로 hBitmap1, hBitmap2 는 명령어 수행 후 비트맵 핸들이 소멸하지만, 이 옵션들을 사용 할 경우 핸들이 유지 됩니다.

이 옵션들을 사용 할 시 차후에 비트맵 핸들을 해제해 주어야 합니다. 

-> ex) DllCall("DeleteObject", Ptr,hBitmap)

*NN : 비교 공차값, NN=0~255

 

 

이미지 비교 방법을 보기 위해 제가 가끔 하는 게임에서 테스트한 이미지를 예로 들겠습니다.

이미지 캡춰는 ImageGet 명령어를 사용했습니다.
 

1. 이미지1


2. 이미지2   -  이미지1 캡춰 후 0.2초 후 캡춰 (그냥 보면 이미지1과 다를게 없어 보입니다)


3. 비교결과 이미지

비교값이 같으면 검은색 다르면 흰색 입니다.

몬스터같은 경우는 끊임없이 움직이므로 항상 흰색으로 나타납니다.

그외 초목이나 구름의 이동 같은 경우도 흰색으로 나타납니다만 몬스터위치처럼 완전히 흰색으로 뭉쳐 있지는 않습니다.


4. 비교결과 이미지 보정

이미지 비교시 비교오차를 미적용시 대상이미지(여기서는 큰곰) 내에 검은색 잡티가 발생합니다. 이를 제거하기 위한 과정입니다.



 

Test.ahk 파일을 다운로드한  'Ahk+ 전용 AutoHotkey.exe 파일'  위에 드래그해서 실행하세요.

이미지비교_샘플.zip

 

<스크립트 샘플>


imgFile1 := "1.이미지1.bmp"

imgFile2 := "2.이미지2.bmp"

잡티픽셀크기 := 2


;액티브 윈도우의 지정영역 시간차 캡쳐 후 비교

F1::

  CoordMode, Pixel, Relative

  ImageGet, hBmp1, 9,163,631,318,, *WH

  sleep, 200

  ImageGet, hBmp2, 9,163,631,318,, *WH

  SaveHBITMAPToFile(hBmp1, imgFile1)

  SaveHBITMAPToFile(hBmp2, imgFile2)

  

  ;두 이미지 비교값을 hBmpResult 로 출력

  ImageCompare, hBmp1, hBmp2, hBmpResult

  cmpErrorLevel := ErrorLevel

  SaveHBITMAPToFile(hBmpResult, "3.비교값.bmp")


  ;두 이미지 비교값을 보정 - 잡티 제거

  ImageFilter, BoundaryClean, hBmpResult, hBmpResult,,,,, *SearchColorBlack *FillColorWhite *SizeMax%잡티픽셀크기%

  SaveHBITMAPToFile(hBmpResult, "4.비교값보정.bmp")


  msg =

  (LTrim

    ErrorLevel = %cmpErrorLevel%

  

    0 = 비교값 같음

    1 = 비교값 다름

    2 = 이미지 오류, 비교용 이미지 크기가 서로 달라도 이 오류가 뜸니다.

  )

  MsgBox % msg

  

  DllCall("DeleteObject", Ptr,hBmpResult)

return

 

 

 

Posted by 와이로