Opencv step by step - 鼠标事件
来源:互联网 发布:叮叮摩卡数据无法打开 编辑:程序博客网 时间:2024/05/22 04:45
鼠标事件有下面几种(没有滚轮事件,比较遗憾):
#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);
这就是刷新的过程了。
下面是效果图:
0 0
- Opencv step by step - 鼠标事件
- Opencv step by step - ROI
- Opencv step by step - 绘图
- Opencv step by step - 配置文件
- Opencv step by step - 加载视频
- Opencv step by step - 视频进度条
- Opencv step by step - 图像变换
- Opencv step by step - 视频变换
- Opencv step by step - 基本数据类型
- Opencv step by step - 图像融合
- Opencv step by step - 图像载入
- Opencv step by step - 阈值化
- Opencv step by step - 自适应阈值
- NHibernate Step By Step(4)-事件(Event)
- NHibernate Step by Step
- OGRE step by step
- step by step
- MinGW Step by Step
- 【Cocos2d-x】CCControlButton状态按钮的使用
- Hdu 2955 Robberies
- 逗比学树莓派之lcd1602显示
- 数据库 shard 分片存储
- bzoj 2178: 圆的面积并
- Opencv step by step - 鼠标事件
- 算法和数据结构-选择排序、插入排序及希尔排序 java实现
- 《北平无战事》有感
- 极光推送重要方法
- hibernate之12.many2many变形
- oracle SQL sample 随机抽样查询
- Ubuntu的软件源更新常见问题及解决
- AndroidStudio导入和签出SVN项目问题
- Objective-C之run loop详解