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

  • 相关阅读:
    【bzoj4152】[AMPPZ2014]The Captain 堆优化Dijkstra
    【bzoj4547】Hdu5171 小奇的集合 矩阵乘法
    【bzoj1264】[AHOI2006]基因匹配Match 树状数组
    【bzoj3856】Monster 乱搞
    【bzoj4724】[POI2017]Podzielno 二分
    【bzoj4976】宝石镶嵌 乱搞+dp
    【bzoj4070】[Apio2015]雅加达的摩天楼 set+堆优化Dijkstra
    【bzoj4627】[BeiJing2016]回转寿司 离散化+树状数组
    【bzoj2124】等差子序列 STL-bitset
    【bzoj1996】[Hnoi2010]chorus 合唱队 区间dp
  • 原文地址:https://www.cnblogs.com/liming19680104/p/15693564.html
Copyright © 2020-2023  润新知