cVSetMouseCallback 함수로 이벤트 핸들러 함수를 지정하고, 핸들러 함수에서 이벤트를 처리한다.
window_name = 이벤트를 발생시킬 윈도우의 이름을 적는다.
on_mouseEvent = 마우스 이벤트를 처리할 핸들러 함수를 적는다. 함수명은 사용자가 임의로 정해도된다. 단, 인수의 자료형과 의미는 미리 정해져있다.
param = 핸들러 함수로 전달될 사용자 정의 인수이다.
이렇게 인수가 정해져있다.
event = 마우스 이벤트
flags = 마우스 이벤트가 발생했을 때 마우스 버튼, CTRL, SHIFT, ALT 키를 눌렀는지 확인하기 위해 사용된다.
param = 사용자 정의 인수
마우스 이벤트(event)상수
CV_EVENT_LBUTTONDOWN 왼쪽버튼 DOWN
CV_EVENT_RBUTTONDOWN 오른쪽 버튼 DOWN
CV_EVENT_LBUTTONUP 왼쪽 버튼 UP
CV_EVENT_RBUTTONUP 오른쪽 버튼 UP
CV_EVENT_LBUTTONDBLCLK 왼쪽 버튼 더블클릭
CV_EVENT_RBUTTONDBLCLK 오른쪽 버튼 더블클릭
마우스 flags 상수
CV_EVENT_FLAG_RBUTTON 오른쪽버튼누름
CV_EVENT_FLAG_CTRLKEY CTRL 키를 누름
CV_EVENT_FLAG_SHIFTKEY SHIFT 키를 누름
CV_EVENT_FLAG_ALTKEY ALT 키를 누름
예제 소스
#include "stdafx.h"
#include <cv.h>
#include <highgui.h> // 키보드 마우스 트랙바 이벤트 처리 기능을 갖는 사용자 인터페이스 함수를 지원한다.
void on_eventhandle(int event, int x, int y, int flags, void* param);
int main()
{
IplImage *dstImage;
dstImage = cvCreateImage(cvSize(512, 512), IPL_DEPTH_8U, 3);
cvSet(dstImage, CV_RGB(255, 255, 255));
cvNamedWindow("Mouse Event Handling", CV_WINDOW_AUTOSIZE);
cvShowImage("Mouse Event Handling", dstImage);
cvSetMouseCallback("Mouse Event Handling", on_eventhandle, (void *)dstImage);
cvWaitKey(0);
cvDestroyAllWindows();
cvReleaseImage(&dstImage);
return 0;
}
void on_eventhandle (int event, int x, int y, int flags, void* param) //핸들러 함수
{
IplImage *image;
image = (IplImage *)param;
switch(event)
{
case CV_EVENT_LBUTTONDOWN:
if(flags & CV_EVENT_FLAG_SHIFTKEY) // 쉬프트를 누르고 클릭시 네모
cvRectangle(image, cvPoint(x-5, y-5), cvPoint(x+5, y+5), CV_RGB(255, 0, 0));
else //아니면 원
{
cvCircle(image, cvPoint(x, y), 5, CV_RGB(0, 0, 255), 5);
}
break;
case CV_EVENT_RBUTTONDOWN:
cvCircle(image, cvPoint(x, y), 5, CV_RGB(255, 0, 0), 5);
break;
}
cvShowImage("Mouse Event Handling", image);
}
참조 - OpenCv 프로그래밍
'프로그래밍 기초 > 영상처리' 카테고리의 다른 글
얼굴인식의 역사, 이슈, 알고리즘, Process flow, 기본적인 기술 비교 (1) | 2011.11.06 |
---|---|
이진화하기 (0) | 2011.11.02 |
키보드 이벤트 처리 (0) | 2011.10.30 |
문자 출력 (1) | 2011.10.30 |
선, 사각형, 원, 타원 그리기 (0) | 2011.10.30 |