日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

openCV鼠标事件实例

發布時間:2025/3/15 编程问答 14 豆豆
生活随笔 收集整理的這篇文章主要介紹了 openCV鼠标事件实例 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

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,//按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鼠标事件实例的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。