OpenCVのマウスイベントは「cvSetMouseCallback関数」で登録する。
※highgui.hより
typedef void (CV_CDECL *CvMouseCallback )(int event, int x, int y, int flags, void* param);
/* assign callback for mouse events */
CVAPI(void) cvSetMouseCallback( const char* window_name, CvMouseCallback on_mouse,
void* param CV_DEFAULT(NULL));
▲ココに書いてあるように、コールバック関数の引数は
func(int event, int x, int y, int flags, void* param)
となる。
【例】
void mouseCbFunc(int event, int x, int y ,int flags, void* param)
{
//プログラムしやすいようにポインタをわたす
IplImage *img = static_cast<IplImage *>(param);
switch(event)
{
case CV_EVENT_LBUTTONDOWN://クリック位置に円を描画
cvDrawCircle(img,cvPoint(x,y),50,CV_RGB(255,0,255),2);
cvShowImage("mouse test",img);
break;
}
}
int main()
{
IplImage *imgA = cvLoadImage(filename);
… …
cvSetMouseCallback("mouse test",mouseCbFunc,static_cast<void *>(imgA));
… …
cvWaitKey();
… …
}
▲ドラッグもクリックも1つのコールバックでおこなう。