반응형
캡쳐된 게임 화면에 클릭을 하면, 마우스 클릭 좌표를 추출하는 기능을 써본다.
※ 깃헙에 OpenCvsharp 3.7 버전으로 예제가 있는데, OpenCV 3과 4는 함수 자체가 너무 달라서 고생을 좀 했다. trackback: 076923.github.io/posts/C-opencv-37/
1. Mouse callback 메서드 생성
-. OpenCV로 생성된 화면에 대해 마우스 이벤트가 발생하면 반응하는 (Mouse callback) 메서드를 만든다.
OpenCvSharp.MouseCallback _ClickOnVision = new OpenCvSharp.MouseCallback(ClickOnVision); // 함수선언
OpenCvSharp.Window win = new OpenCvSharp.Window("vision0"); //"vision0" 창에 대한 win 핸들러 생성
Cv2.SetMouseCallback(win.name, _ClickOnVision); //콜백 선언
2. 콜백 메서드 구성
-. 위와 같이 코드를 구성하면, "vision0" 창 위에 마우스가 '올라가기만 해도' 콜백 메서드가 발동한다.
-. 마우스 '클릭'이벤트 만을 걸러내는게 필요한데, OpenCvSharp에서는 MouseEventTypes라는 enumeration이 존재한다.shimat.github.io/opencvsharp_docs/html/fb1fcdbd-1d4c-9c37-262a-91bf473f5799.htm
-. 이 중 LButtonDown (마우스 왼쪽버튼 클릭)에 한정하는 메서드를 만든다.
static void ClickOnVision(OpenCvSharp.MouseEventTypes eve, int x, int y, OpenCvSharp.MouseEventFlags flag, System.IntPtr _ptr)
{
if(eve == MouseEventTypes.LButtonDown) //입력된 이벤트 타입이 L.ButtonDown(왼쪽클릭) 인 경우만 아래 함수 실행
{
string text = "X : " + x.ToString() + " Y : " + y.ToString();
Debug.WriteLine(text);
Cv2.PutText(positionScreen, text, new OpenCvSharp.Point(x, y), OpenCvSharp.HersheyFonts.HersheyComplex, 0.5, OpenCvSharp.Scalar.Yellow);
Cv2.ImShow("position", positionScreen);
}
}
3. 화면에 마우스 좌표 표시
-. 위 함수의 PutText 함수는 OpenCv의 Mat 변수에 텍스트를 입력하는 함수로, 화면에 좌표 표시를 위해 사용했다.
Cv2.PutText(positionScreen, text, new OpenCvSharp.Point(x, y), OpenCvSharp.HersheyFonts.HersheyComplex, 0.5, OpenCvSharp.Scalar.Yellow);
Cv2.ImShow("position", positionScreen);
4. 화면에 오버레이 표현
-. BitwiserOr 함수를 이용해 좌표가 표시된 화면과 캡쳐 화면을 겹친다.
Cv2.BitwiseOr(_imgFinal, positionScreen, _imgFinal);
Cv2.ImShow(visionName, _imgFinal);
728x90
반응형
'C#' 카테고리의 다른 글
[C#] 이미지파일 읽기 + 출력 (Bitmapimage, ImageDrawing) (0) | 2021.01.03 |
---|---|
[C#] Thread - 반복실행, Timer (0) | 2020.11.26 |
[C#] Thread - thread 지정 + 상태확인 (0) | 2020.11.01 |
[C#] 화면캡쳐 + 출력 (OpenCvSharp4) (0) | 2020.10.22 |
user32.dll - 특정 창의 위치 가져오기 (0) | 2020.10.21 |
최근댓글