opencv对鼠标的响应

#include <cv.h>

#include <highgui.h>

#include <stdio.h>

#pragma comment(lib,"C:\\Program Files\\OpenCV1.0\\lib\\cv.lib")

#pragma comment(lib,"C:\\Program Files\\OpenCV1.0\\lib\\cxcore.lib")

#pragma comment(lib,"C:\\Program Files\\OpenCV1.0\\lib\\ml.lib")

#pragma comment(lib,"C:\\Program Files\\OpenCV1.0\\lib\\highgui.lib")

#pragma comment(lib,"C:\\Program Files\\OpenCV1.0\\lib\\cvaux.lib")

#pragma comment(lib,"C:\\Program Files\\OpenCV1.0\\lib\\cvcam.lib")

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编号)

时间: 2024-08-08 02:59:39

opencv对鼠标的响应的相关文章

opencv与mfc显示图片操作,MFC的鼠标响应在opencv图片上失效,opencv滚轮事件没有响应问题描述解决。

原文作者:aircraft 原文链接:https://www.cnblogs.com/DOMLX/p/11588758.html 用mfc 与OPENCV编写成. 出了很多冲突异常事件导致鼠标操作没有响应 当opencv窗口与mfc控件绑定时,可以认为opencv绑定区域覆盖在mfc 控件上,此时mfc本身的鼠标响应在此区域失效,只能调用opencv的鼠标响应事件. 而当你调用opencv的鼠标滚轮事件时候又会没有反应,此时是因为mfc的鼠标滚轮事件优先级别更好 ,只能在这里用mfc的鼠标滚轮响

如何用OpenCV跟踪鼠标操作

转载:如何用OpenCV跟踪鼠标操作 http://blog.skyoung.org/2014/05/01/how-to-track-mouse/ 在视频第一帧手动标记出目标的位置是在线视觉跟踪中最基本的一个操作,实现这个操作需要检测鼠标的移动和点击事件.OpenCV提供了setMouseCallback这个函数来响应鼠标的动作,并返回鼠标在绑定窗口上的坐标位置.下面就这个函数的使用做一个简单的介绍. 首先,setMouseCallback的C++函数声明如下: 1 void onMouse(i

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

最近在处理DuiLib中自定义列表行元素事件,因为处理方案得不到较好的效果,于是只好一层一层的去剥离DuiLib事件是怎么来的,看能否在某一层截取消息,自己重写. 我这里使用CListContainerElementUI行元素,元素中有插入button,平时行元素不显示,鼠标移动上去显示出来,鼠标移走就隐藏button.Duilib自己是不带这个功能的,它有一个鼠标移动上去的热点事件,按理说重写热点事件就好了.但是当时比较急没找到怎么触发的,之后一直没继续走这条思路.后来找到源码事件里面有 vo

opencv的鼠标以及键值使用

简介 本章是学习opencv上键盘和鼠标相应的操纵与实例. 键盘响应 #include <math.h> #include <string.h> #include <stdio.h> #include <stdlib.h> #include <opencv2/core/core.hpp> #include <opencv2/highgui/highgui.hpp> #include <opencv/cv.h> int ma

【AI基础】python:openCV——处理鼠标事件(1)

一.用户通过鼠标对图像视窗最常见的操作有: 左键单击按下 左键单击抬起 左键按下拖动 鼠标指针位置移动 二.单次单击操作响应事件及顺序 Opencv中setMouseCallback()创建了一个鼠标回调函数,每次在图像上单击鼠标左键再抬起的过程,都会分3次调用鼠标响应函数,并且响应顺序是: 1.左键单击按下: 2.左键单击抬起: 3.鼠标指针位置移动(即使原地单击,鼠标位置并没有移动): 原文地址:http://blog.51cto.com/devops2016/2084084

地图中的鼠标移动响应

概述: 假设如下场景:首先地图加载一个WMS或者切片,wms为POI或者切片上有POI,我们知道WMS或者切片是无法做到像Marker或者矢量的事件相应的,但是我们又需要对这些POI点进行响应,这就不太好办了.基于此想法,本文讲述此想法的实现思路以及OL2和Arcgis中的实现方式. 思路: 实现的关键是注册两个map的事件:1.四至发生变化的时候:2.鼠标移动的时候. 1.四至发生变化 当地图的四至发生变化时,我们需要将变化后四至内的POI点的数据返回到前台进行下一步处理,返回的逻辑可以采用一

js拖拽——将鼠标事件响应范围扩大到整个系统桌面

起因: 最近在做一个可拖拽的拓扑图,遇到的这个问题:如果执行拖拽操作的时候鼠标拖动很快,可能会出现鼠标脱离页面乃至浏览器的范围,如果这时松开鼠标按键,那么将不能响应鼠标的onmouseup事件,从而导致onmouseup和onmousemove事件不能被释放掉. 对于这个问题,网上很多相似的文章写了解决办法,但都有些毛病,我在这里总结归纳一下. 解决办法: 方案一:针对ie和火狐浏览器 ie浏览器和Firefox提供了setCapture 和 releaseCapture函数来解决该问题.简单写

Matlab学习-------GUI鼠标事件响应(鼠标划线实例)

(1)打开GUIDE,添加一个坐标轴并保存 (2)添加鼠标响应事件:鼠标按下事件,鼠标运动事件,鼠标松开事件 (3)对相应事件编写程序 function varargout = guide_m(varargin) % GUIDE_M MATLAB code for guide_m.fig % GUIDE_M, by itself, creates a new GUIDE_M or raises the existing % singleton*. % % H = GUIDE_M returns

关于CMainFrm不接收鼠标事件响应原因

CMainFrm即主框架窗口对鼠标的左键和右键在OnLButtonDown中无响应 解决方案: 1.在OnNcLButtonDown中响应.(即非客户区中响应) 参考文献:http://www.codes51.com/itwd/2705919.html 原文地址:https://www.cnblogs.com/zhuluqing/p/9001139.html