aihot  2017-05-27 18:12:13  OpenCV |   查看评论   

 程序代码如下:

 
  • #include <cv.h> 
  • #include <highgui.h> 
  • #include <stdio.h
  •  
  •  
  •  
  • void onMouse( int event, int x, int y, int flags, void * param );
  •  
  •  
  • int main(int argc, char** argv) 
  •      CvCapture *capture; 
  •      IplImage *frame; 
  •  
  •      capture =cvCaptureFromCAM(0) ; 
  •      cvNamedWindow("Webcam",0); 
  •      cvSetMouseCallback("Webcam",onMouse,NULL); 
  •     while ( true ) 
  •      { 
  •          frame = cvQueryFrame(capture); 
  •  
  •         cvShowImage("Webcam",frame); 
  •  
  •         if (cvWaitKey(10)>=0) 
  •          { 
  •             break ; 
  •          } 
  •      } 
  •      cvReleaseCapture( & capture); 
  •      cvDestroyWindow("Webcam");
  •  
  •      return 0; 
  • void onMouse( int Event, int x,int y, int flags, void * param ) 
  •      printf("( %d, %d) ",x,y); 
  •      printf("The Event is : %d ",Event); 
  •      printf("The flags is : %d ",flags); 
  •      printf("The param is : %d\n",param); 
  • }
 
这边每当滑鼠在视讯视窗介面点击一下的时候,都会有固定三个动作
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_MBUTTO N 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编号)
 

除特别注明外,本站所有文章均为 赢咖4注册 原创,转载请注明出处来自OpenCV中响应鼠标信息cvSetMouseCallback函数的使用

留言与评论(共有 0 条评论)
   
验证码:
[lianlun]1[/lianlun]