zoukankan      html  css  js  c++  java
  • OpenCV中响应鼠标消息 (转)

     1 #include <cv.h>
     2 #include <highgui.h>
     3 #include <stdio.h>
     4 
     5 #pragma comment(lib,"C:\Program Files\OpenCV1.0\lib\cv.lib")
     6 #pragma comment(lib,"C:\Program Files\OpenCV1.0\lib\cxcore.lib")
     7 #pragma comment(lib,"C:\Program Files\OpenCV1.0\lib\ml.lib")
     8 #pragma comment(lib,"C:\Program Files\OpenCV1.0\lib\highgui.lib")
     9 #pragma comment(lib,"C:\Program Files\OpenCV1.0\lib\cvaux.lib")
    10 #pragma comment(lib,"C:\Program Files\OpenCV1.0\lib\cvcam.lib")
    11 
    12 void onMouse(int event,int x,int y,int flags,void* param );
    13 
    14 int main(int argc, char** argv)  
    15 {  
    16     CvCapture *capture;
    17     IplImage *frame;
    18     capture =cvCaptureFromCAM(0);
    19     cvNamedWindow("Webcam",0);
    20     cvSetMouseCallback("Webcam",onMouse,NULL);
    21     while(true)
    22     {
    23         frame = cvQueryFrame(capture);
    24         cvShowImage("Webcam",frame);
    25         if(cvWaitKey(10)>=0)
    26         {
    27             break;
    28         }
    29     }
    30     cvReleaseCapture(&capture);
    31     cvDestroyWindow("Webcam");
    32     return 0;
    33 }
    34 void onMouse(int Event,int x,int y,int flags,void* param )
    35 {
    36     printf("( %d, %d) ",x,y);
    37     printf("The Event is : %d ",Event);
    38     printf("The flags is : %d ",flags);
    39     printf("The param is : %d
    ",param);
    40 }

    这边每当鼠标在视讯窗口接口点击一下的时候,都会有固定三个动作
    1.点击(Click)
    2.放开(Down)3.滑动(move)
    因此,程序执行鼠标在点击的时候onMouse()都会连续跑三次,代表鼠标在点击的时候连续的三个事件,而
    void onMouse(int Event,int x,int y,int flags,void* param ) 子程序的自变量分成四个不同的分类,分别为
    1.事件回传代号(int Event)
    2.坐标(int x,int y)
    3.flags代号(int flags) 4.Mouse事件的代号名称(param)
    Event代表的是鼠标回传的事件号码,每当鼠标有动作,Event就会回传一个整数讯息到onMouse(),也顺便回传鼠标移动的坐标,flags代表的是拖曳事件,param则是自己定义onMouse()事件的ID,就跟GUI接口的窗口接口ID一样(cvGetWindowHandle()),不过这边是自己给的编号,而窗口接口的ID则是系统自动随机分配的ID,而鼠标事件的执行可以细分的分类为
    Event:
    #define CV_EVENT_MOUSEMOVE 0                   滑动
    #define CV_EVENT_LBUTTONDOWN 1           左键点击
    #define CV_EVENT_RBUTTONDOWN 2           右键点击
    #define CV_EVENT_MBUTTONDOWN 3           中键点击
    #define CV_EVENT_LBUTTONUP 4                 左键放开
    #define CV_EVENT_RBUTTONUP 5                 右键放开
    #define CV_EVENT_MBUTTONUP 6                 中键放开
    #define CV_EVENT_LBUTTONDBLCLK 7         左键双击
    #define CV_EVENT_RBUTTONDBLCLK 8         右键双击
    #define CV_EVENT_MBUTTONDBLCLK 9         中键双击
    flags:
    #define CV_EVENT_FLAG_LBUTTON 1           左键拖曳
    #define CV_EVENT_FLAG_RBUTTON 2           右键拖曳
    #define CV_EVENT_FLAG_MBUTTON 4           中键拖曳
    #define CV_EVENT_FLAG_CTRLKEY 8     (8~15)按Ctrl不放事件
    #define CV_EVENT_FLAG_SHIFTKEY 16   (16~31)按Shift不放事件
    #define CV_EVENT_FLAG_ALTKEY 32       (32~39)按Alt不放事件

    上面的#define是OpenCV自行定义的参数,要做事件捕捉的时候,可以用参数,亦可以用纯数字表示.简单的介绍mouse相关的东西.

    cvSetMouseCallback()
    鼠标事件呼叫函式,需要给它一个Handler,也就是事件驱动的子程序名称,Handler必须要符合void xxx(int event,int x,int y,int flags,void* param )格式.
    cvSetMouseCallback("窗口名称",自行定义子程序名称,自行定义子程序名称的ID);

    onMouse()自行定义的鼠标事件名称,可以接受鼠标讯息做相关控制.
    void xxx(事件讯息整数代号,鼠标x轴坐标,鼠标y轴坐标,拖曳事件讯息整数代号,自行给予xxx这子程序的ID编号)

  • 相关阅读:
    ZYAR20A 亚克力2驱 蓝牙 298寻迹避障机器人 —— 小车按键启动和蜂鸣器报警
    ZYAR20A 亚克力2驱 蓝牙 298寻迹避障机器人 —— 小车指定花式动作
    ZYAR20A 亚克力2驱 蓝牙 298寻迹避障机器人 —— 小车指定花式动作
    ZYAR20A 亚克力2驱 蓝牙 298寻迹避障机器人 —— 小车指定花式动作
    ZYAR20A 亚克力2驱 蓝牙 298寻迹避障机器人 —— 小车前后左右综合实验
    ZYAR20A 亚克力2驱 蓝牙 298寻迹避障机器人 —— 小车前后左右综合实验
    ZYAR20A 亚克力2驱 蓝牙 298寻迹避障机器人 —— 小车前后左右综合实验
    asp中设置session过期时间方法总结
    asp中设置session过期时间方法总结
    ASP.NET关于Session_End触发与否的问题
  • 原文地址:https://www.cnblogs.com/wyuzl/p/6701918.html
Copyright © 2011-2022 走看看