Opencv中提供一个鼠标调用的函数,SetMouseCallback()函数,它配合一个回调函数来实现鼠标操作的功能。

 

首先看一下SetMouseCallback的函数原型:

c++: void setMousecallback(const string& winname, MouseCallback onMouse, void* userdata=0)

 

下面具体介绍一下各个参数的含义:

void setMousecallback

(

const string& winname, //这个参数为你的鼠标操作的窗口名称,例如你指定的窗口叫"阿三"

MouseCallback onMouse, //在你指定的"阿三"这个窗口里发生鼠标操作时,被调用的函数指针

void* userdata //当你调用上面的函数指针时,如果你有一个参数(例如变量"阿猫")要给调用函数,就是这货了

)

 

下面要介绍那个回调函数的原型:

 void on_Mouse(int event, int x, int y, int flags, void* param)

 

下面介绍一下各个参数的含义:

 void on_Mouse

(

int event, //这个参数是 CV_EVENT_*变量之一(用来标识鼠标的各种操作。移动,左键按下,右键按下等)

int x, int y, //鼠标指在图像坐标系上的坐标,(注意一点是图像的坐标系,不是窗口坐标系)

int flags, //是CV_EVENT_FLAG的组合

void* param //用户定义的要给回调函数的调用的参数(上面的"阿猫");

);

 

Event代表的是鼠标回传的事件号码,每当鼠标有动作,Event就会回传一个整数信息到on_Mouse(),也顺便回传鼠标移动的坐标,flags代表的是拖曳事件,而鼠标事件的执行可以细分的分类为

 

 

定义的CV_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 //中键双击

 
 

 

定义的CV_EVENT_FLAG_*

 

#define CV_EVENT_FLAG_LBUTTON   1 // 左键拖曳

#define CV_EVENT_FLAG_RBUTTON   2 //右键拖曳

#define CV_EVENT_FLAG_MBUTTON   4 // 中键拖曳

#define CV_EVENT_FLAG_CTRLKEY   8 //按Ctrl不放事件

#define CV_EVENT_FLAG_SHIFTKEY  16 // 按Shift不放事件

#define CV_EVENT_FLAG_ALTKEY    32 // 按Alt不放事件

 

 

 

 

 

 

最新文章

  1. getParameterMap()的返回值为Map<String, String[]>,从其中取得请求参数转为Map<String, String>的方法如下:
  2. Linux防火墙规则的查看、添加、删除和修改
  3. hadoop-ha QJM架构应用故障总结
  4. TLCL中英对照版
  5. Android 内存管理分析(四)
  6. C#使用Xamarin开发可移植移动应用进阶篇(8.打包生成安卓APK并精简大小),附源码
  7. eclipse开发Groovy代码,与java集成,maven打包编译
  8. Javac编译原理 《深入分析java web 技术内幕》第四章
  9. 微信导出群记录V3.0
  10. Tensorflow训练神经网络
  11. angularJs的一次性数据绑定:双冒号::
  12. HDUOJ---1996汉诺塔VI
  13. 【C++对象模型】使用gcc、clang和VC++显示C++类的内存布局
  14. Redhat安装配置VNC服务器
  15. spark-sql做ETL时遇到的两个问题
  16. 洛谷【P1757】通天之分组背包
  17. 【点分治】【map】【哈希表】hdu4670 Cube number on a tree
  18. py---------面向对象进阶
  19. namenode启动成功,但是不能通过web访问50070问题
  20. android note【转】

热门文章

  1. [转][赞]Android开发者必知的开发资源
  2. C++学习003-#define 自定义宏
  3. Python Flask之旅
  4. 为什么mysqld启动报错
  5. LeetCode 215——数组中的第 K 个最大元素
  6. spring mvc:实现给Controller函数传入map参数
  7. Nginx+tomcat+redis集群共享session实现负载均衡
  8. http请求的过程
  9. [HDU6304][数学] Chiaki Sequence Revisited-杭电多校2018第一场G
  10. ASP.NET页面之间传值Application(5)