OpenCV基础八:OpenCV在各操作系统平台上的使用(陆续更新)
八. 平臺
鼠標
OpenCV通過回調(diào)函數(shù)使用鼠標,以下為定義回調(diào)函數(shù)必須匹配的協(xié)議:
void your_mouse_callback(int event, //事件類型int x, //鼠標事件的X位置int y, //yint flags, //鼠標事件的更多細節(jié)void *param //Parameters from cv::setMouseCallback() );第一個參數(shù)表:
| 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_MBUTTONDBCLK | 9 |
第四個標志為鼠標事件標志, 用于鼠標組合鍵(如: shift+鼠標左鍵):
| cv::EVENT_FLAG_LBUTTON | 1 |
| cv::EVENT_FLAG_RBUTTON | 2 |
| cv::EVENT_FLAG_MBUTTON | 4 |
| cv::EVENT_FLAG_CTRLKEY | 8 |
| cv::EVENT_FLAG_SHIFTKEY | 16 |
| cv::EVENT_FLAG_ALTKEY | 32 |
最后一個參數(shù)是void類型的指針, OpcnCV可以用來傳遞額外的信息到任何類型的結(jié)構(gòu).
需要一個函數(shù)來注冊這個回調(diào)函數(shù), 即cv::setMouseCallback(), 它需要三個參數(shù):
void cv::setMouseCallback(const string& windowName, //應(yīng)用回調(diào)函數(shù)的窗口cv::MouseCallback on_mouse, //要注冊的回調(diào)函數(shù)void* param = NULL //回調(diào)函數(shù)的額外參數(shù), 可以給回調(diào)函數(shù)傳遞信息 );滑動條,滾動條和開關(guān)
HighGUI中創(chuàng)建一個滑動條的函數(shù)如下:
int cv::creatTrackbar(const string& trackbarname, //滑動條名稱cosnt string& windowName, //窗口名稱int* value, //滑動的條當前位置int cout, //滑動條總的數(shù)量cv::TrackbarCallback onChange = NULL, //回調(diào)函數(shù)(可選) (當滑動按鈕移動時, 回調(diào)函數(shù)自動調(diào)用)void* param //額外參數(shù) );這個回調(diào)函數(shù)并非必須的. 若無回調(diào)函數(shù), 移動滑動鈕的唯一響應(yīng)就是value指向的變量值的變化(可以通過這個值來對值的變化做出響應(yīng))
回調(diào)函數(shù)所滿足的形式:
void yourTrackbarCallback(int pos, //滑動條位置void* param = NULL //cv::setTrackbarCallback()的參數(shù) );c::creatTrackbar()的最后一個參數(shù)是params, 可以是一個任意類型的指針, 一旦回調(diào)執(zhí)行, 這個參數(shù)可以傳遞給回調(diào)函數(shù)的params參數(shù), 這樣一來, 不創(chuàng)建全局變量也可以處理滑動條事件.
有兩個函數(shù)可以用來獲取和設(shè)置滑動條的位置值:
int cv::getTrackbarPos(const string& trackbarName, //滑動條名稱const string& windowName //窗口名稱 ); void cv::setTrackbarPos(const string& trackbarName,const string& windowName,int pos //設(shè)置的位置值 );通過Qt后端工作
文字蒙版
用于在窗口上方顯示文字條幅, 其函數(shù)API:
int cv::displayOverlay(const string& name, //顯示的窗口名稱const string& text, //顯示的文字int delay //顯示的ms時間(0 = 'forever') );最后一個參數(shù)中, 若delay的值設(shè)置為0, 那么蒙版將一直存在或直到你再次調(diào)用cv::displayOverlay()覆蓋原來的蒙版, 若在delay結(jié)束前調(diào)用cv::dispalyOverlay(), 則將顯示新的蒙版, 且延時重置.
創(chuàng)建按鈕
Qt接口提供創(chuàng)建按鈕的函數(shù), 包括正常的按鈕, 單選按鈕和復(fù)選框, 所有創(chuàng)建的按鈕都位于控制面板上.
所有三種類型的按鈕都通過一個方法完成:
int cv::creatButton(const string& buttonName, //按鈕名稱cv::ButtonCallback onChange = NULL, //按鈕事件的回調(diào)函數(shù)(可無)void* params, //額外的按鈕事件參數(shù)int buttonType = cv::PUSH_BUTTON, //按鈕類型(PUSH_BUTTON or RADIOBOX or CHECKBOX)int initalState = 0 //按鈕的初始化狀態(tài) );按鈕回調(diào)函數(shù)定義:
void yourButtonCallback(int state, //按鈕狀態(tài)void* params //cv::creatButton傳遞的參數(shù) );你傳遞給cv::creatButton()的params指針也會被傳給回調(diào)函數(shù)的params參數(shù).
buttonType可以取值為: cv::PUSH_BUTTON, cv::RADIOBOX或者cv::CHECKBOX:
第一個為標準按鈕, 當你點擊按鈕便會調(diào)用回調(diào)函數(shù)
第二個為復(fù)選框, 按鈕參數(shù)根據(jù)有沒有選擇復(fù)選框設(shè)置為1或者0
第三個為單選按鈕, 區(qū)別在于點擊按鈕同時調(diào)用當前點擊按鈕的回調(diào)函數(shù)和當前沒有被點擊的按鈕(互斥狀態(tài)).
文本和文字
使用Qt接口寫文本必須首先創(chuàng)建一個CvFont對象, 任何時候想在屏幕中添加文本都可以使用這個對象, 字體通過函數(shù)cv::fontQt()創(chuàng)建:
CvFont fontQt(const string& fontName, //字體名稱int pointSize, //字體大小cv::Scalar color = cv::Scalar::all(0), //BGR顏色int weight = cv::FONT_NORMAL, //字體寬度(粗細), 1-100(Table 9-3)int spacing = 0 //字體間距 );Qt字體粗細的預(yù)定以名稱及與其關(guān)聯(lián)的值:
| cv::FONT_LIGHT | 25 |
| cv::FONT_NORMAL | 50 |
| cv::FONT_DEMIBOLD | 63 |
| cv::FONT_BOLD | 75 |
| cv::FONT_BLACK | 87 |
最后一個參數(shù)spacing控制字符間距, 值正負都可以
放置文本函數(shù):
void cv::addText(cv::Mat& image, //要寫入的圖片const string& text, //要寫入的文本cv::Point location, //左下角定位的文本位置CvFont* font //OpenCV字體的結(jié)構(gòu)體 );文本的位置為首字符左下角的位置(文本基線的起點)
設(shè)置和獲取窗口屬性
大部分基于Qt后端創(chuàng)建的窗口狀態(tài)屬性都是可以獲取的, 并且大部分都能夠在創(chuàng)建窗口后更改:
void cv::setWindowProperty(const string& name, //窗口名稱int prop_id, //窗口屬性IDdouble prop_value //設(shè)置的屬性值 ); double cv::getWindowProperty(const string& name, //窗口名稱int prop_id //窗口的屬性ID );獲取屬性通過提供窗口名和屬性ID(prop_id)就可以, 這是屬性需要額外提供屬性表:
| cv::WIND_PROP_FULL_SIZE | 設(shè)置為cv::WINDOW_FULLSCREEN可以將窗口顯示為全屏 設(shè)置為cv::WINDOW_NORMAL窗口顯示為正常尺寸 |
| cv::WIND_PROP_AUTOSIZE | 設(shè)置為cv::WINDOW_AUTOSIZE窗口大小自動調(diào)整為圖像大小 設(shè)置為cv::WINDOW_NORMAL顯示圖像大小調(diào)整為窗口大小 |
| cv::WIND_PROP_ASPECTRATIO | 設(shè)置為cv::WINDOW_FREERATIO可以使窗口有任意長寬比(用戶可調(diào)整) 設(shè)置為cv::WINDOW_KEEPRATIO只能按照固定長寬比調(diào)整窗口大小 |
保存和恢復(fù)窗口的狀態(tài)
Qt接口可以保存和恢復(fù)窗口的狀態(tài):
void cv::savaWindowParameters(const string& name //窗口名 ); void cv::loadWindowParameters(const string& name );保存窗口時使用cv::saveWindowParameters即可, 恢復(fù)窗口通過cv::loadWIndowParameters()即可.
即使你退出或者重啟程序, 屬性加載命令依然能夠正常工作.
和OpenGL交互
回調(diào)函數(shù)需要滿足的定義:
void yourOpenGLCallback(void* params //從cv::createOpenGLCallback()傳過來的參數(shù) );可以通過cv::createOpenGLCallback()配置回調(diào)函數(shù):
void cv::createOpenGLCallback(const string& windowName, //窗口名稱cv::OpenGLCallback callback, //OpenGL的回調(diào)函數(shù)void* params = NULL //傳給回調(diào)函數(shù)的參數(shù) );參數(shù)可以在調(diào)用回調(diào)函數(shù)時給函數(shù)以額外的參數(shù).
總結(jié)
以上是生活随笔為你收集整理的OpenCV基础八:OpenCV在各操作系统平台上的使用(陆续更新)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 流利阅读12.27 Why life e
- 下一篇: Ubuntu下配置FreeRadius+