openCV鼠标事件实例
生活随笔
收集整理的這篇文章主要介紹了
openCV鼠标事件实例
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
1.原理
OpenCV的鼠標事件主要涉及兩個函數:- 回調函數cvSetMouseCallback
on_mouse:每次指定窗口鼠標事件發生時被調用的函數指針;
param :傳遞到回調函數的參數;
- on_mouse的原型
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,//按CTRLCV_EVENT_FLAG_SHIFTKEY =16,//按SHIFTCV_EVENT_FLAG_ALTKEY =32//按ALT };
2.實例
#include <cv.h> #include <highgui.h>//define our callback which we will install for mouse events void 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 image void 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.總結
以上是生活随笔為你收集整理的openCV鼠标事件实例的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 即时通讯作为互联网最普及的基础服务之一
- 下一篇: 让你快乐的21种方法