openCV鼠标事件实例
来源:互联网 发布:面包车拉货软件 编辑:程序博客网 时间:2024/05/17 04:38
1.原理
OpenCV的鼠标事件主要涉及两个函数:
- 回调函数cvSetMouseCallback
void cvSetMouseCallback( const char* window_name, CvMouseCallback on_mouse, void* param CV_DEFAULT(NULL));
window_name:鼠标执行的窗口名;
on_mouse:每次指定窗口鼠标事件发生时被调用的函数指针;
param :传递到回调函数的参数;
- on_mouse的原型
void Foo(int event, int x, int y, int flags, void* param);
param:传递到cvSetMouseCallback函数调用的参数
x、y:鼠标指针在图像坐标系的坐标
event: CV_EVENT_*变量之一enum{ CV_EVENT_MOUSEMOVE =0,//滑动 CV_EVENT_LBUTTONDOWN =1,//左键点击 CV_EVENT_RBUTTONDOWN =2,//右键点击 CV_EVENT_MBUTTONDOWN =3,//中键点击 CV_EVENT_LBUTTONUP =4,//左键放开 CV_EVENT_RBUTTONUP =5,//右键放开 CV_EVENT_MBUTTONUP =6,//中键放开 CV_EVENT_LBUTTONDBLCLK =7,//左键双击 CV_EVENT_RBUTTONDBLCLK =8,//右键双击 CV_EVENT_MBUTTONDBLCLK =9//中键双击};
flags:是CV_EVENT_FLAG的组合enum{ CV_EVENT_FLAG_LBUTTON =1,//左键拖曳 CV_EVENT_FLAG_RBUTTON =2,//右键拖曳 CV_EVENT_FLAG_MBUTTON =4,//中键拖曳 CV_EVENT_FLAG_CTRLKEY =8,//按CTRL CV_EVENT_FLAG_SHIFTKEY =16,//按SHIFT CV_EVENT_FLAG_ALTKEY =32//按ALT};
2.实例
#include <cv.h>#include <highgui.h>//define our callback which we will install for mouse eventsvoid my_mouse_callback(int event, int x, int y, int flags, void* param);CvRect box;bool drawing_box = false;// a little subroutine to draw a box onto an imagevoid draw_box(IplImage* img, CvRect rect){cvRectangle (img,cvPoint(box.x,box.y),cvPoint(box.x + box.width, box.y + box.height),cvScalar(0xff,0x00,0x00));}void main(int argc, char** argv){box = cvRect(-1,-1,0,0);IplImage* image = cvCreateImage( cvSize(200,200), IPL_DEPTH_8U, 3);cvZero( image ); //image space initializedIplImage* temp = cvCloneImage( image );cvNamedWindow( "BoxExample" );//install the callbackcvSetMouseCallback("BoxExample",my_mouse_callback,(void*) image);while (1){cvCopy(image, temp);if(drawing_box)draw_box(temp,box);cvShowImage("BoxExample",temp);if(cvWaitKey( 15 ) == 27)break;}cvReleaseImage( &image );cvReleaseImage( &temp );cvDestroyWindow( "BoxExample");}void my_mouse_callback(int event, int x, int y, int flags, void* param){IplImage* image = (IplImage*) param;switch (event){case CV_EVENT_MOUSEMOVE:if(drawing_box){box.width = x - box.x;box.height = y - box.y;}break;case CV_EVENT_LBUTTONDOWN:drawing_box = true;box = cvRect(x,y,0,0);break;case CV_EVENT_LBUTTONUP:drawing_box = false;if(box.width < 0){box.x += box.width;box.width *= -1;}if(box.height < 0){box.y += box.height;box.height *= -1;}draw_box(image, box);break;}}
输出结果:
3.参考资料
Bradski G, Kaehler A. Learning OpenCV: Computer Vision in C++ with the OpenCV Library[M]. O'Reilly Media, Inc. 2013.
阅读全文
1 0
- openCV鼠标事件实例
- OpenCV 鼠标事件 注意事项
- OpenCV--鼠标事件响应
- OpenCV 鼠标事件
- OpenCV添加鼠标事件
- Learning OpenCV 鼠标事件
- 【OpenCV】 处理鼠标事件
- Opencv鼠标事件
- opencv之鼠标事件
- Opencv 鼠标事件GUI
- openCV鼠标事件学习
- opencv鼠标响应事件
- Opencv处理鼠标事件
- opencv:鼠标事件
- OpenCv鼠标事件管理
- opencv鼠标事件
- opencv鼠标事件1
- opencv鼠标事件2
- 微信小程序 wx.uploadFile 的编码坑
- 重构--七层登录
- STL空间配置器
- 默认成员函数的几种调用情景
- Python数据分析笔记
- openCV鼠标事件实例
- HotSpot虚拟机中对象的创建
- TCP/IP详解学习笔记(13)-TCP坚持定时器,TCP保活定时器
- 编写一个递归方法,返回数N的二进制表示中1的个数
- STL初步用法
- wordpress获取各类页面链接的函数总结
- 面向对象——继承
- 牛客网--蘑菇阵
- HTML+CSS相对宽度和绝对宽度冲突时的div解决方法