상위 목록: 하위 목록: 작성 날짜: 읽는 데 15 분 소요

마우스 콜백(OnMouseCallback)

CvWindow를 사용하여 새롭게 띄운 윈도우 창에서는 C#에 포함되어 있는 이벤트를 사용할 수 없습니다.

OnMouseCallback을 사용하여 마우스에 관한 이벤트를 실행할 수 있습니다.

원본(Source, src)은 영상이나 이미지를 사용합니다.



메인 코드

CvWindow win;
IplImage src;


win = new CvWindow("OpenCV", src);
win.OnMouseCallback += new CvMouseCallback(click);


private void click(MouseEvent eve, int x, int y, MouseEvent flag)
{
    if (eve == MouseEvent.LButtonDown)
    {
        string text = "X : " + x.ToString() + " Y : " + y.ToString();
        Cv.PutText(src, text, new CvPoint(x, y), new CvFont(FontFace.HersheyComplex, 0.5, 0.5), CvColor.Red);
        win.Image = src;
    }
    if (eve == MouseEvent.RButtonDown && (flag & MouseEvent.FlagCtrlKey) != 0)
    {
        Cv.Circle(src, x, y, 15, CvColor.GreenYellow);
        win.Image = src;
    }
}


세부 코드

CvWindow win;
IplImage src;

전역 변수로 winsrc를 선언합니다.

이는 click()함수에서 지속적으로 사용되기 때문에 전역 변수로 선언합니다.


win = new CvWindow("OpenCV", src);
win.OnMouseCallback += new CvMouseCallback(click);

CvWindow가 표시될 곳에 삽입합니다.

만약, 폼을 로드하자마자 사용한다면 private void Form1_Load(object sender, EventArgs e){} 구문에 삽입합니다.

win을 선언하여 OpenCV의 제목을 가지고 src 이미지를 표시합니다.

win.OnMouseCallback += new CvMouseCallback(click);를 사용하여 win 창에 마우스 콜백사용될 함수를 포함시킵니다.

  • Tip : +=으로 선언해야합니다.


private void click(MouseEvent eve, int x, int y, MouseEvent flag)
{
    ...
}

click() 사용자 정의 함수를 만듭니다.

eve마우스의 클릭에 대한 값을 의미하며 x, y마우스의 좌표입니다.

flag플래그 키를 의미합니다.


if (eve == MouseEvent.LButtonDown)
{
    string text = "X : " + x.ToString() + " Y : " + y.ToString();
    Cv.PutText(src, text, new CvPoint(x, y), new CvFont(FontFace.HersheyComplex, 0.5, 0.5), CvColor.Red);
    win.Image = src;
}

마우스의 왼쪽 버튼을 클릭할 때 작동하며 src에 그린 후, win.Image = src;를 이용하여 다시 출력하는 방식입니다.


if (eve == MouseEvent.RButtonDown && (flag & MouseEvent.FlagCtrlKey) != 0)
{
    Cv.Circle(src, x, y, 15, CvColor.GreenYellow);
    win.Image = src;
}

마우스의 오른쪽 버튼을 클릭Ctrl키를 클릭을 동시에 할 때 작동하며 위와 같이 src에 그린 후 다시 출력하는 방식입니다.

플래그 키를 사용할 경우 (flag & MouseEvent.FlagCtrlKey) != 0을 사용해야 클릭한다는 것을 의미합니다. ==을 사용 시 클릭하지 않을 경우 입니다.

  • 마우스
    • LButtonDown : 마우스 왼쪽 버튼을 누를 때
    • LButtonUp : 마우스 왼쪽 버튼을 뗄 때
    • LButtonDoubleClick : 마우스 왼쪽 버튼을 더블 클릭할 때
    • MButtonDown : 마우스 휠 버튼을 누를 때
    • MButtonUp : 마우스 휠 버튼을 뗄 때
    • MButtonDoubleClick : 마우스 휠 버튼을 더블 클릭할 때
    • RButtonDown : 마우스 오른쪽 버튼을 누를 때
    • RButtonUp : 마우스 오른쪽 버튼을 뗄 때
    • RButtonDoubleClick : 마우스 오른쪽 버튼을 더블 클릭할 때
    • MouseMove : 마우스를 움직일 때


  • 플래그 키
    • FlagLButton : 마우스 왼쪽 버튼을 누른 상태로 드래그 할 때
    • FlagMButton : 마우스 휠 버튼을 누른 상태로 드래그 할 때
    • FlagRButton : 마우스 오른쪽 버튼을 누른 상태로 드래그 할 때
    • FlagShiftKey : Shift 키를 눌렀을 때
    • FlagCtrlKey : Ctrl 키를 눌렀을 때
    • FlagAltKey : Alt 키를 눌렀을 때



출력 결과

댓글 남기기