openCV로 뭘 만들까 고민하다가 옛날에 했던 게임 중 하나인 '매직 타일' 생각이 나서 매크로를 만들어 봤다. 매직 타일은 간단한 리듬 게임이다. 보다시피, 검은색 타일을 화면 내에 있을 때 클릭하면 되는 게임이다. 그래서 구현 자체는 간단할 거라 생각했다. 타일 인식 방법으로 처음엔 템플릿 매칭 방법을 사용했다. 템플릿 매칭템플릿 매칭은 간단하게 원본 이미지에 템플릿 이미지와 일치하는 영역을 찾는 알고리즘이다.
여기까지 보면 내가 하고자하는 방향과 맞다. 하지만 템플릿 매칭의 방식은 원본 이미지에서 템플릿 이미지를 처음부터 끝까지 이동하며 비교하는 방법이었다! 그렇기 때문에 템플릿 매칭 방식으로 구현했을 때, 딜레이가 너무 심해서 오차가 컸다. 안그래도 파이썬인데, 배열을 처음부터 끝까지 조사하다 보니... 그것도 이미지가 아닌 영상을... 그래서 다음으로 생각한 방법은 컨투어(contour) 방법이다. 컨투어컨투어(contour)는 단어 의미에서 유추할 수 있듯이, openCV에서 영상에서 외곽과 내곽을 검출하는 함수이다.
이 방법을 쓰니 확실히 오차가 줄었다! 최종 코드
결과 영상결과 영상개선 방안영상을 보면 알 수 있듯이, 개선이 많이 필요하다. 무엇보다 배열 데이터를 계속해서 다루다 보니 파이썬으론 딜레이가 많은 것 같다. 그래서 C++로 옮겨서 테스트를 해볼 예정이다. |