Opencv 学习笔记之——鼠标操作画出感兴趣区域
本文為原創(chuàng)作品,轉(zhuǎn)載請注明出處
歡迎關(guān)注我的博客:http://blog.csdn.net/hit2015spring和http://www.cnblogs.com/xujianqing/
作者:晨鳧追風(fēng)
Opencv中提供一個鼠標(biāo)調(diào)用的函數(shù),SetMouseCallback()函數(shù),它配合一個回調(diào)函數(shù)來實現(xiàn)鼠標(biāo)操作的功能。
首先看一下SetMouseCallback的函數(shù)原型:
c++:void setMousecallback(
????????????????????????????????????????????? const string& winname,
????????????????????????????????????????????? ?MouseCallback on_Mouse,
???????????????????????????????????????????????? void*userdata=0
??????????????????????????????????????????????????)
?
下面具體介紹一下各個參數(shù)的含義:
void? setMousecallback
(
conststring& winname,???????//這個參數(shù)為你的鼠標(biāo)操作的窗口名稱,
???????????????????????? //例如你指定的窗口叫“阿三”
MouseCallback on_Mouse,??//在你指定的“阿三”這個窗口里發(fā)生鼠標(biāo)操作時,被調(diào)用的函數(shù)指針
void*userdata????????????//當(dāng)你調(diào)用上面的函數(shù)指針時,如果你有一個參數(shù)
?????????????????????? //(例如變量“阿貓”)要給調(diào)用函數(shù),就是這貨了
)
?
下面要介紹那個回調(diào)函數(shù)的原型:
void? on_Mouse(int event, int x, int y, int flags, void* param)?
下面介紹一下各個參數(shù)的含義:
?void on_Mouse
(
intevent,???//這個參數(shù)是CV_EVENT_*變量之一
???????????//(用來標(biāo)識鼠標(biāo)的各種操作。移動,左鍵按下,右鍵按下等)
intx, int y,?//鼠標(biāo)指在圖像坐標(biāo)系上的坐標(biāo),
?????????? //(注意一點是圖像的坐標(biāo)系,不是窗口坐標(biāo)系)
????intflags,??//是CV_EVENT_FLAG的組合
void*param?//用戶定義的要給回調(diào)函數(shù)的
?????????? //調(diào)用的參數(shù)(上面的“阿貓”);
);
?????Event代表的是鼠標(biāo)回傳的事件號碼,每當(dāng)鼠標(biāo)有動作時,Event就會回傳一個整數(shù)信息到on_Mouse(),也順便回傳鼠標(biāo)移動的坐標(biāo),flags代表的是拖曳事件,而鼠標(biāo)事件的執(zhí)行可以細(xì)分的分類為?
定義的CV_EVENT_*
#define CV_EVENT_MOUSEMOVE?????0?????????????????????????????//鼠標(biāo)滑動
#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????????????????????//中鍵雙擊
?
定義的CV_EVENT_FLAG_*
#define CV_EVENT_FLAG_LBUTTON??1?????????????????????//左鍵拖曳
#define CV_EVENT_FLAG_RBUTTON??2????????????????????//右鍵拖曳
#define CV_EVENT_FLAG_MBUTTON??4???????????????????//中鍵拖曳
#define CV_EVENT_FLAG_CTRLKEY??8????????????????????//按Ctrl不放事件
#define CV_EVENT_FLAG_SHIFTKEY?16??????????????????//按Shift不放事件
#define CV_EVENT_FLAG_ALTKEY???32???????????????????//按Alt不放事件
總結(jié)
以上是生活随笔為你收集整理的Opencv 学习笔记之——鼠标操作画出感兴趣区域的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: c语言共享内存,在爷儿俩进程间使用共享内
- 下一篇: 手机html滚动原理,手机滚动-如何实现