Opencv step by step - 鼠标事件
鼠标事件有下面几种(没有滚轮事件,比较遗憾):
#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 - 鼠标事件的更多相关文章
- Opencv下图像对鼠标事件的响应
直接上代码: //////////////////////////////////////////////////////////////////////// // // 该程序从文件中读入一幅图像, ...
- Opencv函数setMouseCallback鼠标事件响应
用户通过鼠标对图像视窗最常见的操作有: 1. 左键单击按下 2. 左键单击抬起 3. 左键按下拖动 4. 鼠标指针位置移动 单次单击操作响应事件及顺序 Opencv中setMouseCallback( ...
- opencv鼠标事件
#include <opencv2\opencv.hpp> using namespace cv; struct mouse_para { cv::Mat org; cv::Mat img ...
- opencv入门系列教学(四)处理鼠标事件
一.鼠标事件的简单演示 opencv中的鼠标事件,值得是任何与鼠标相关的任何事物,例如左键按下,左键按下,左键双击等.我们先来看看鼠标事件有哪些,在python中执行下面代码: import cv2 ...
- Opencv处理鼠标事件-OpenCV步步精深
在图片上双击过的位置绘制一个 圆圈 鼠标事件就是和鼠标有关的,比如左键按下,左键松开,右键按下,右键松开,双击右键等等. 我们可以通过鼠标事件获得与鼠标对应的图片上的坐标.我们通过以下函数来调用查看所 ...
- WPF Step By Step 自定义模板
WPF Step By Step 自定义模板 回顾 上一篇,我们简单介绍了几个基本的控件,本节我们将讲解每个控件的样式的自定义和数据模板的自定义,我们会结合项目中的具体的要求和场景来分析,给出我们实现 ...
- Android查询:模拟键盘鼠标事件(adb shell 实现)
1. 发送键盘事件: 命令格式1:adb shell input keyevent “value” 其中value以及对应的key code如下表所列: KeyEvent Value KEYCODE ...
- WPF Step By Step 系列-Prism框架在项目中使用
WPF Step By Step 系列-Prism框架在项目中使用 回顾 上一篇,我们介绍了关于控件模板的用法,本节我们将继续说明WPF更加实用的内容,在大型的项目中如何使用Prism框架,并给予Pr ...
- WPF Step By Step 系列 - 开篇 ·
WPF Step By Step 系列 - 开篇 公司最近要去我去整理出一个完整的WPF培训的教程,我刚好将自己学习WPF的过程和经验总结整理成笔记的方式来讲述,这里就不按照书上面的东西来说了,书本上 ...
随机推荐
- Effective Java 64 Strive for failure atomicity
Principle Failure atomic - A failed method invocation should leave the object in the state that it w ...
- JavaScript Patterns 4.7 Init-Time Branching
When you know that a certain condition will not change throughout the life of the program, it makes ...
- Autocomplete:属性介绍、firefox中文支持问题
如有问题,请前往 http://www.cnblogs.com/dreamowneryong/p/4953911.html 原文评论交流 一,属性介绍 * minChars (Number) 在触发a ...
- 【JavaScript】JQuery中$.fn、$.extend、$.fn.extend
Web开发肯定要使用第三方插件,对于一个炫丽的效果都忍不住想看看对方是如何实现的,刚下载了一个仿京东商品鼠标经过时局部放大的插件.看了两眼JQuery源码,看看就感觉一头雾水.JQuery本来自己学的 ...
- npm报错Error: ENOENT, stat 'D:\NodeLearn\node-global'
最近想试下当前的当红炸子鸡 Nodejs,在安装配置时,发生了下面的错误: C:\nodejs\npmjs\bin>cd .. C:\nodejs\npmjs>cd .. C:\nodej ...
- DataTable转List<Model>通用类
/// <summary> /// DataTable转List<Model>通用类[实体转换辅助类] /// </summary> public class Mo ...
- 问题解决——multimap中统计key的种类
================声明================= 本文原创,转载请注明出处和作者,并保持文章的完整性. 本文链接:http://www.cnblogs.com/wlsandwho ...
- poj2528 Mayor's posters(线段树之成段更新)
Mayor's posters Time Limit: 1000MSMemory Limit: 65536K Total Submissions: 37346Accepted: 10864 Descr ...
- linux硬链接与软链接
在linux操作系统中的文件数据除了实际的内容外,还会含有文件权限(rwx)与文件属性(owner,group,other等),文件系统通常会将这两部分的数据存放在不同的区块,文件权限与文件属性放置在 ...
- selenium使用等待的几种方式
1.使用java的sleep try { Thread.sleep(3000); } catch (InterruptedException e) { // TODO Auto-generated c ...