处理的函数如下:

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;
	}
}
Logo

技术共进,成长同行——讯飞AI开发者社区

更多推荐