zoukankan      html  css  js  c++  java
  • opencv鼠标事件

    #include<opencv2/opencv.hpp>
    #include<iostream>
    
    bool down = false;
    int i = 0;
    
    void onMouse(int event, int x, int y, int flags, void* param) //鼠标回调函数
    {
        /*  鼠标事件发生时,自动执行
        Event是整数,表示鼠标事件的类型
        X和Y为事件发生时鼠标的坐标,用像素坐标表示
        flags表示事件发生时按下鼠标的那个键
        param是指向任意对象的指针,作为附件的参数发送给函数
    
        */
    
        cv::Mat* im = reinterpret_cast<cv::Mat*>(param);
        //im事件发生时鼠标所指的图像指针
    
        if (event== cv::EVENT_LBUTTONDOWN) {   //如果按下了鼠标左键
            std::cerr << "你按下了鼠标左键x=" << x << ",     y=" << y << std::endl << std::endl;
            down = true;
    
        }
        if (event == cv::EVENT_LBUTTONUP) {  //如果释放了鼠标左键
            std::cerr << "你释放了鼠标左键x=" << x << ",     y=" << y << std::endl << std::endl;
            down = false;
    
        }
        if (event == cv::EVENT_MOUSEMOVE && down==true) {   //如果按下左键并移动
            std::cerr << "你按下了鼠标左键并移动 x=" << x << ",     y=" << y << std::endl << std::endl;
        }
           
            
            /*
            cv::EVENT_LBUTTONDOWN=1        左键按下
            cv::EVENT_RBUTTONDOWN=2        右键按下
            cv::EVENT_MBUTTONDOWN=3        中键按下
            cv::EVENT_LBUTTONUP=4          左键放开
            cv::EVENT_RBUTTONUP=5          右键放开
            cv::EVENT_MBUTTONUP=6          中键放开
            cv::EVENT_LBUTTONDBLCLK=7      左键双击
            cv::EVENT_RBUTTONDBLCLK=8      右键双击
            cv::EVENT_MBUTTONDBLCLK=9      中键双击
            cv::EVENT_MOUSEMOVE=0,         鼠标移动
            cv::EVENT_MOUSEWHEEL=10,       滚轮滚动
            cv::EVENT_MOUSEHWHEEL=11       横向滚轮滚动
    
            */
            
    
    
        if (flags == cv::EVENT_FLAG_LBUTTON) {    //左键拖拽
            std::cerr << "你拖拽了鼠标左键 x=" << x << ",     y=" << y << std::endl << std::endl;
        }
    
        if (flags == 8) {    
            std::cerr << "按住CTRL拖拽 i=" << i++ << std::endl << std::endl;
        }
    
    
        /*
        cv::EVENT_FLAG_LBUTTON   =1,   //左键拖拽
        cv::EVENT_FLAG_RBUTTON   =2,   //右键拖拽
        cv::EVENT_FLAG_MBUTTON   =4,   //中键拖拽
        cv::EVENT_FLAG_CTRLKEY   =8   //按住CTRL
        cv::EVENT_FLAG_SHIFTKEY  =16  //按住Shift
        cv::EVENT_FLAG_ALTKEY    =32   //按住ALT
    
        */
    
    }
    
    
    int main(int argc, char** argv) {
    
        cv::Mat image = cv::imread("D:/bb/tu/1.jpg");
        if (image.empty()) {
            std::cout << "图像读取失败..." << std::endl;
            return 0;
        }
    
        cv::namedWindow("Original Image");
        cv::imshow("Original Image", image);
    
        cv::setMouseCallback("Original Image", onMouse, reinterpret_cast<void*>(&image));//处理鼠标动作
        /*
        参数1:窗口的名字
        参数2:onMouse:鼠标响应函数,回调函数。指定窗口里每次鼠标时间发生的时候,被调用的函数指针
        参数3:userdate:传给回调函数的参数【鼠标所指的图像】
    
        */
        cv::waitKey(0);
        return 0;
    }

  • 相关阅读:
    excel批量导入后 数据库校验存储过程
    编译内核时覆盖KBUILD_BUILD_USER和KBUILD_BUILD_HOST
    EDID真实数据块,请参考标准文档仔细核对
    RK30SDK开发板驱动分析(二):DDR频率配置
    Linux中的固件加载例子
    Android中如何禁止音量调节至静音
    C++中内部类访问外部类的私有成员
    DSD, DFF, DSF, DST概念解析
    Android中播放DSD音乐
    Linux系统调用分析
  • 原文地址:https://www.cnblogs.com/liming19680104/p/15693564.html
Copyright © 2011-2022 走看看