鼠标事件有下面几种(没有滚轮事件,比较遗憾):

#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 中键双击

下面用一个例子来学习一下这个事件:

#include <cv.h>
#include <highgui.h> CvRect box;
bool draging; void mouse_callback(int event, int x, int y, int flags, void* param)
{
IplImage *image = (IplImage*)param;
switch(event) {
case CV_EVENT_MOUSEMOVE:
if(draging) {
box.width = x - box.x;
box.height = y - box.y;
//printf("%d,%d,%d,%d\n", box.x,box.y,box.width,box.height);
}
break;
case CV_EVENT_LBUTTONDOWN:
draging = true;
printf("down evt\n");
box.x = x;
box.y = y;
printf("%d,%d,%d,%d\n", box.x,box.y,box.width,box.height);
break;
case CV_EVENT_LBUTTONUP:
draging = false;
printf("%d,%d,%d,%d\n", box.x,box.y,box.width,box.height);
box.x = 0;
box.y = 0;
box.width = 0;
box.height = 0;
printf("up evt\n");
break; } } int main(int argc, char **argv)
{
const char* window_name = "my mouse"; box = cvRect(-1, -1, 0, 0);
IplImage *image = cvCreateImage(cvSize(200,200), 8, 3);
cvZero(image); cvNamedWindow(window_name);
cvSetMouseCallback(window_name, mouse_callback, (void *)image);
cvShowImage(window_name, image); while(1) {
if(draging) {
cvZero(image);
cvRectangle(image,cvPoint(box.x,box.y),
cvPoint(box.x + box.width ,box.y+box.height),
cvScalar(255,255,0));
cvShowImage(window_name, image);
} if(cvWaitKey(10) == 27)
break;
} cvReleaseImage(&image);
cvDestroyWindow(window_name); }

这个例子的效果实际上是在鼠标拖动的时候画矩形。核心点就是回调函数了:

cvSetMouseCallback(window_name, mouse_callback, (void *)image);

cvWaitKey是一个非阻塞的过程,所以拖动的时候下面的代码一直会被调用:

			cvZero(image);
cvRectangle(image,cvPoint(box.x,box.y),
cvPoint(box.x + box.width ,box.y+box.height),
cvScalar(255,255,0));
cvShowImage(window_name, image);

这就是刷新的过程了。

下面是效果图:

Opencv step by step - 鼠标事件的更多相关文章

  1. Opencv下图像对鼠标事件的响应

    直接上代码: //////////////////////////////////////////////////////////////////////// // // 该程序从文件中读入一幅图像, ...

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

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

  3. opencv鼠标事件

    #include <opencv2\opencv.hpp> using namespace cv; struct mouse_para { cv::Mat org; cv::Mat img ...

  4. opencv入门系列教学(四)处理鼠标事件

    一.鼠标事件的简单演示 opencv中的鼠标事件,值得是任何与鼠标相关的任何事物,例如左键按下,左键按下,左键双击等.我们先来看看鼠标事件有哪些,在python中执行下面代码: import cv2 ...

  5. Opencv处理鼠标事件-OpenCV步步精深

    在图片上双击过的位置绘制一个 圆圈 鼠标事件就是和鼠标有关的,比如左键按下,左键松开,右键按下,右键松开,双击右键等等. 我们可以通过鼠标事件获得与鼠标对应的图片上的坐标.我们通过以下函数来调用查看所 ...

  6. WPF Step By Step 自定义模板

    WPF Step By Step 自定义模板 回顾 上一篇,我们简单介绍了几个基本的控件,本节我们将讲解每个控件的样式的自定义和数据模板的自定义,我们会结合项目中的具体的要求和场景来分析,给出我们实现 ...

  7. Android查询:模拟键盘鼠标事件(adb shell 实现)

    1. 发送键盘事件: 命令格式1:adb shell input keyevent “value” 其中value以及对应的key code如下表所列: KeyEvent Value KEYCODE ...

  8. WPF Step By Step 系列-Prism框架在项目中使用

    WPF Step By Step 系列-Prism框架在项目中使用 回顾 上一篇,我们介绍了关于控件模板的用法,本节我们将继续说明WPF更加实用的内容,在大型的项目中如何使用Prism框架,并给予Pr ...

  9. WPF Step By Step 系列 - 开篇 ·

    WPF Step By Step 系列 - 开篇 公司最近要去我去整理出一个完整的WPF培训的教程,我刚好将自己学习WPF的过程和经验总结整理成笔记的方式来讲述,这里就不按照书上面的东西来说了,书本上 ...

随机推荐

  1. C#输入输出重定向

    当 Process 将文本写入其标准流中时,通常将在控制台上显示该文本.通过重定向 StandardOutput 流,可以操作或取消进程的输出.例如,可以筛选文本.用不同方式将其格式化,也可以将输出同 ...

  2. Mysql的float类型造成的困扰总结

    因为换了工作正在学习使用MySQL,今天领导提出了一个问题,如下: X列是累加值,A列是每日新增值,那么X2应该是X1+A2,而且存储过程里也是这样计算的.可是奇怪的是X2的值却总是和正确值(2396 ...

  3. radclient安装记录

    下载地址: http://freeradius.org/getting.html 选择:1.1.5版本 wget -c ftp://ftp.freeradius.org/pub/freeradius/ ...

  4. Windows Server 2012 R2 IIS8.5+PHP(FastCGI)+MySQL环境搭建教程

    准备篇 一.环境说明: 操作系统:Windows Server 2012 R2 PHP版本:php 5.5.8 MySQL版本:MySQL5.6.15 二.相关软件下载: 1.PHP下载地址: htt ...

  5. Ubuntu,QT5连接MySQL

    用QT连接MySQL需要共享库 libqsqlmysql.so的驱动,路径在plugin/sqldrivers目录下,乍看已经可用了,其实不然. 用ldd命令分析一下,libmysqlclient_r ...

  6. NoSQL介绍

    NoSQL(Not Only SQL),是一种非关系型数据库:说到这里,大家需要了解关系型数据库和非关系型数据库的区别,可参考:从关系型数据库到非关系型数据库. NoSQL是以key-value形式存 ...

  7. 以太网卡TSO技术

    一.简介 TSO(TCP Segment Offload)技术是一种利用网卡的少量处理能力,降低CPU发送数据包负载的技术,需要网卡硬件及驱动的支持.   二.原理 在不支持TSO的网卡上,TCP层向 ...

  8. SQL Server 2005中更改sa的用户名和密码

    修改数据库SA账号名称的代码如下:  代码如下: Alter LOGIN sa DISABLE Alter LOGIN sa WITH NAME = [systemAccount] "sys ...

  9. Linux shell get random number

    the Shell Profile: When a new interactive shell is started, /etc/profile, followed by /etc/bash.bash ...

  10. java 字节流和字符流的区别 转载

    转载自:http://blog.csdn.net/cynhafa/article/details/6882061 java 字节流和字符流的区别 字节流与和字符流的使用非常相似,两者除了操作代码上的不 ...