转自:http://blog.csdn.net/haihong84/article/details/6599838

程序代碼如下:

#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_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編號)

版权声明:本文为博主原创文章,未经博主允许不得转载。

OpenCV之响应鼠标(三):响应鼠标信息的更多相关文章

  1. Opencv函数setMouseCallback鼠标事件响应

    用户通过鼠标对图像视窗最常见的操作有: 1. 左键单击按下 2. 左键单击抬起 3. 左键按下拖动 4. 鼠标指针位置移动 单次单击操作响应事件及顺序 Opencv中setMouseCallback( ...

  2. 第六章 Windows应用程序对键盘与鼠标的响应 P121 6-8

    基于键盘与鼠标应用的程序设计 一.实验目的 1.掌握键盘与鼠标在应用程序中的消息响应机制.   二.实验内容及步骤 实验任务 1.熟悉键盘的消息响应: 2.熟悉鼠标的消息响应: 实验内容 设计一个窗口 ...

  3. OpenGL 鼠标交互响应事件

    OpenGL 鼠标.键盘交互响应事件 先来一个样例: uses gl,glu,glut; procedure InitEnvironment;cdecl; begin glClearColor();/ ...

  4. DuiLib事件分析(一)——鼠标事件响应

    最近在处理DuiLib中自定义列表行元素事件,因为处理方案得不到较好的效果,于是只好一层一层的去剥离DuiLib事件是怎么来的,看能否在某一层截取消息,自己重写. 我这里使用CListContaine ...

  5. HTML5 精灵8方向移动+背景滚动+音效播放+鼠标事件响应

    如何清空画布 通过调用函数 ctx.clearRect(0, 0, ctx.canvas.width, ctx.canvas.height);   如何实现背景滚动 首先我们准备了一张2532*940 ...

  6. 【Linux开发】【Qt开发】Qt界面键盘、触摸屏、鼠标的响应设置

    USB键盘 经过一番搜索,发现对Qt键盘的支持主要关系到两个方面: 1. 键盘类型确定: 4.7以前的Qt版本,如果是PS2圆孔键盘,Qt编译时需加上选项:-qt-kbd-vr41xx(未测试):如果 ...

  7. HTTP响应头和请求头信息对照表

    HTTP请求头提供了关于请求,响应或者其他的发送实体的信息.HTTP的头信息包括通用头.请求头.响应头和实体头四个部分.每个头域由一个域名,冒号(:)和域值三部分组成. 通用头标:即可用于请求,也可用 ...

  8. [面试没答上的问题1]http请求,请求头和响应头都有什么信息?

    最近在找工作,面试官问了一些问题自己并没有回答上,这里做一个小结. http请求,请求头和响应头都有什么信息? 页面和服务器交互最常见的方式就是ajax,ajax简单来说是浏览器发送请求到服务端,然后 ...

  9. delphi treeview 鼠标移动显示hint信息

    procedure TForm1.TreeView1MouseMove(Sender: TObject; Shift: TShiftState;   X, Y: Integer); var   Nod ...

  10. datagrid 列鼠标悬浮显示全部信息

    首次发表随笔,且是java新手,求不黑,可能在高手眼里好笑,嘿嘿1,样式设置超过字数限制显示省略号:<style type="text/css"> .datagrid- ...

随机推荐

  1. 转!!java线程状态

    一. 线程状态类型1. 新建状态(New):新创建了一个线程对象.2. 就绪状态(Runnable):线程对象创建后,其他线程调用了该对象的start()方法.该状态的线程位于可运行线程池中,变得可运 ...

  2. 转!大端模式&小端模式

    大端模式&小端模式   在C语言中除了8位的char型之外,还有16位的short型,32位的long型(要看具体的编译器),对于位数大于8位的处理器,例如16位或者32位的处理器,由于寄存器 ...

  3. 利用ADO.NET导出大批量数据

    2015年12月,XX项目中需要做一个数据导出功能,当时所有页面的到处功能均已经实现,但有个页面数据量太大,导出过程中导出页面直接卡死.不得已我准备选用ADO.NET来重新完成这个功能,因为考虑到越偏 ...

  4. Unity3D Mecanim 动画系统骨骼动画问题解决方法

    http://7dot9.com/2014/08/16/unity3d-mecanim%E5%8A%A8%E7%94%BB%E7%B3%BB%E7%BB%9F%E9%AA%A8%E9%AA%BC%E5 ...

  5. rand()和srand()GetTickCount函数用法

    标准库<cstdlib>(被包含于<iostream>中)提供两个帮助生成伪随机数的函数: 函数一:int rand(void):从srand (seed)中指定的seed开始 ...

  6. ASP.NET Core身份识别

    Introduction to Identity 66 of 93 people found this helpful By Pranav Rastogi, Rick Anderson, Tom Dy ...

  7. ubuntu 系统出错一览

    1.系统升级出错:打开终端输入:sudo apt-get install -f

  8. 数据库中Schema(模式)概念的理解

    在学习SQL的过程中,会遇到一个让你迷糊的Schema的概念.实际上,schema就是数据库对象的集合,这个集合包含了各种对象如:表.视图.存储过程.索引等.为了区分不同的集合,就需要给不同的集合起不 ...

  9. Qt之线程基础

    何为线程 线程与并行处理任务息息相关,就像进程一样.那么,线程与进程有什么区别呢?当你在电子表格上进行数据计算的时候,在相同的桌面上可能有一个播放器正在播放你最喜欢的歌曲.这是一个两个进程并行工作的例 ...

  10. python 循环设计

    for循环 1.range()用法 for循环后的in跟随一个序列的画,循环每次使用的序列元素而不是序列的下标 例:s='abcdefg' for i in range(0,len(s),3): pr ...