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