【opencv】调用鼠标事件SetMouseCallback(“窗口名“,处理函数,NULL)
【代码】【opencv】调用鼠标事件SetMouseCallback(“窗口名“,处理函数,NULL)
·
处理的函数如下:
void f(int event, int x, int y, int flags, void* param);
- event为所发生的事件名
- x,y为鼠标在图片上的坐标
- 全部的事件:
enum
{
EVENT_MOUSEMOVE =0, //鼠标移动
EVENT_LBUTTONDOWN =1, //按下左键
EVENT_RBUTTONDOWN =2, //按下右键
CEVENT_MBUTTONDOWN =3, //按下中键
EVENT_LBUTTONUP =4, //放开左键
EVENT_RBUTTONUP =5, //放开右键
EVENT_MBUTTONUP =6, //放开中键
EVENT_LBUTTONDBLCLK =7, //左键双击
EVENT_RBUTTONDBLCLK =8, //右键双击
EVENT_MBUTTONDBLCLK =9, //中键双击
EVENT_MOUSEWHEEL =10, //滚轮滚动
EVENT_MOUSEHWHEEL =11 //横向滚轮滚动(还好我鼠标是G502可以这么干)
};
enum
{
EVENT_FLAG_LBUTTON =1, //左键拖拽
EVENT_FLAG_RBUTTON =2, //右键拖拽
EVENT_FLAG_MBUTTON =4, //中键拖拽
EVENT_FLAG_CTRLKEY =8, //按住CTRL拖拽
EVENT_FLAG_SHIFTKEY =16, //按住Shift拖拽
EVENT_FLAG_ALTKEY =32 //按住ALT拖拽
};
- 定义鼠标事件
namedWindow("I", 1);
setMouseCallback("I", mouse_I, NULL);
- 处理函数
//通过以下鼠标事件,在原图中取四个坐标
void mouse_I(int event, int x, int y, int flags, void* param)
{
switch (event)
{
case EVENT_LBUTTONDOWN://按下左键
//记录坐标
IPoint = Point2f(x, y);
break;
case EVENT_LBUTTONUP://放开左键
src[i] = IPoint;
circle(I, src[i], 7, Scalar(0), 3);//标记
i += 1;
break;
default:
break;
}
}
更多推荐
所有评论(0)