【opencv】8.获取鼠标动作(滑轮滚动,左键按下,右键按下,鼠标移动)并进行相应处理

获取鼠标动作进行相应处理

int main(){
    cv::imshow("EnvFusion", img); //这里显示一个窗口
    /*<!-- 在窗口上进行鼠标操作就使用  cv::setMouseCallback()-->
    <!-- 可进行的操作有 滑轮滚动,左键按下,右键按下,鼠标移动,
    还可以组合,比如鼠标左键按下并且鼠标移动,就是鼠标在窗口中拖动 -->
    <!-- 该函数也会获取鼠标点击的x,y -->*/
    cv::setMouseCallback("EnvFusion", OnMouseAction);
}

// <!-- 鼠标操作回调函数 -->
  void OnMouseAction(int event, int x, int y, int flags, void *ustc) {
    double value;
    float step = 0.02;
    switch (event) {
      case CV_EVENT_MOUSEWHEEL:
        value = cv::getMouseWheelDelta(flags);
        if (value > 0)
          map_scale = map_scale * 0.9;
        else if (value < 0)
          map_scale = map_scale * 1.1;
        if (map_scale > 20) map_scale = 20;
        if (map_scale < 0.05) map_scale = 0.05;
        break;
      case CV_EVENT_LBUTTONDOWN:
        MousePress(x, y);
        map_down = true;
        prept = cv::Point(x, y);
        break;
      case CV_EVENT_LBUTTONUP:
        map_down = false;
        break;
      default:
        break;
    }

  if (map_down == true && event == CV_EVENT_MOUSEMOVE)  //左键按下且鼠标移动
  {
    cv::Point curpt = cv::Point(x, y);
    cv::Point dpoint0 = curpt - prept;
    dpoint += dpoint0;
    prept = curpt;
  } else {
    dpoint = cv::Point(0, 0);
  }
 }
void MousePress(int x, int y) {
  <!-- 这里的x,y是传进来的鼠标点击位置的坐标 -->
  <!-- 一般是用来判断鼠标点击的坐标(x,y)是不是在某个范围内,是的话就进行某种操作 -->
}
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值