C# OpenCV 강좌 : 제 37강 - 마우스 콜백
마우스 콜백(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;전역 변수로 win와 src를 선언합니다.
이는 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 키를 눌렀을 때
출력 결과

공유하기
Kakao
Naver
Twitter
LinkedIn
Facebook
댓글 남기기