opencv —— setMouseCallback 鼠标操作

鼠标操作:setMouseCallback 函数

void setMouseCallback(const string& window_name, MouseCallback on_Mouse, void* userdata=0);
  • window_name,窗口的名字
  • on_Mouse,指定窗口里每次鼠标事件发生时,被调用的函数指针。

这个函数的原型大概形式为 void XXX(int event, int x, int y, int flags, void* param) .

其中 event 是 EVENT_XXX 类型数据,

x 和 y 是鼠标指针在图像坐标系(不是窗口坐标系)中的坐标值,

flags 是 EVENT_FLAG_XXX 类型数据,

param 是用户定义的传递到 setMouseCallback 函数调用的参数。

  • userdata,用户定义的传递到回调函数的参数,有默认值 0。

 

成员函数:on_Mouse 函数

void XXX(int event, int x, int y, int flags, void* param)
  • event:

EVENT_MOUSEMOVE          0 //滑动

EVENT_LBUTTONDOWN        1 //左键点击

EVENT_RBUTTONDOWN        2 //右键点击

EVENT_MBUTTONDOWN        3 //中键点击

EVENT_LBUTTONUP          4 //左键放开

EVENT_RBUTTONUP          5 //右键放开

EVENT_MBUTTONUP          6 //中键放开

EVENT_LBUTTONDBLCLK      7 //左键双击

EVENT_RBUTTONDBLCLK      8 //右键双击

EVENT_MBUTTONDBLCLK      9 //中键双击

  • flags:

EVENT_FLAG_LBUTTON       1 //左鍵拖曳

EVENT_FLAG_RBUTTON       2 //右鍵拖曳

EVENT_FLAG_MBUTTON       4 //中鍵拖曳

EVENT_FLAG_CTRLKEY       8 //(8~15)按Ctrl不放事件

EVENT_FLAG_SHIFTKEY      16 //(16~31)按Shift不放事件

EVENT_FLAG_ALTKEY        32 //(32~39)按Alt不放事件

  • void *ustc 标识了所响应的事件函数,相当于自定义了一个OnMouseAction()函数的ID。

 

代码示例:

#include
using namespace cv;
RNG rngs{ 12345 };
bool bool_draw = false;
Point pre_point;
Mat src, tem;
Scalar color;
void on_mouse(int event, int x, int y, int flags, void* param) {
    switch (event) {
    case EVENT_MOUSEMOVE://鼠标移动
        if (bool_draw == true) {
            tem = src.clone();
            color = Scalar(rngs.uniform(0, 255), rngs.uniform(0, 255), rngs.uniform(0, 255));
            rectangle(tem, pre_point, Point(x, y), color);
            imshow("show", tem);
        }
        break;
    case EVENT_LBUTTONDOWN://鼠标左键按下
        bool_draw = true;
        pre_point = Point(x, y);
        break;
    case EVENT_LBUTTONUP://鼠标左键抬起
        bool_draw = false;
        rectangle(src, pre_point, Point(x, y), color);
        break;
    }
}
int main() {
    src = Mat::zeros(600, 800, CV_8UC3);
    namedWindow("show");
    setMouseCallback("show", on_mouse);
    waitKey(0);
}

 

效果展示:

opencv —— setMouseCallback 鼠标操作_第1张图片

 

你可能感兴趣的:(opencv —— setMouseCallback 鼠标操作)