在筆記二中咱們已經知道了,在highgui文件夾下的正是opencv圖形用戶接口功能結構,咱們這篇博客所說的即是D:\Program Files\opencv340\opencv\build\include\opencv2\highgui\highgui.hpp中的函數了。ssh
目錄函數
【namedWindow】工具
【destroyWindow】字體
【destroyAllWindows】ui
【startWindowThread】spa
【waitKeyEx】線程
【waitKey】code
【imshow】orm
【resizeWindow】blog
【resizeWindow】
【moveWindow】
【setWindowProperty】
【setWindowTitle】
【getWindowProperty】
【setMouseCallback】
【getMouseWheelDelta】
【selectROI】
【selectROIs】
【createTrackbar】
【getTrackbarPos】
【setTrackbarPos】
【setTrackbarMax】
【setTrackbarMin】
【setOpenGlDrawCallback】
【setOpenGlContext】
【updateWindow】
【QtFont】
【addText】
【displayOverlay】
【displayStatusBar】
【saveWindowParameters】
【loadWindowParameters】
【createButton】
詳細說明
在講函數以前,咱們先看一下即將用到的幾種枚舉類型和回調函數。首先是枚舉類型:
一、窗口標誌:
1 //! Flags for cv::namedWindow 2 enum WindowFlags { 3 WINDOW_NORMAL = 0x00000000, //!< 用戶可自由調整大小 4 WINDOW_AUTOSIZE = 0x00000001, //!< 窗口尺寸由圖像決定,用戶不可調節 5 WINDOW_OPENGL = 0x00001000, //!< opengl支持的窗口 6 7 WINDOW_FULLSCREEN = 1, //!< 全屏 8 WINDOW_FREERATIO = 0x00000100, //!< 最大化,不受圖片縱橫比影響 9 WINDOW_KEEPRATIO = 0x00000000, //!< 保持圖像縱橫比不變 10 WINDOW_GUI_EXPANDED=0x00000000, //!< 狀態條與工具條 11 WINDOW_GUI_NORMAL = 0x00000010, //!< old fashious way 12 };
二、窗口屬性:
1 //! Flags for cv::setWindowProperty / cv::getWindowProperty 2 enum WindowPropertyFlags { 3 WND_PROP_FULLSCREEN = 0, //!< 全屏(can be WINDOW_NORMAL or WINDOW_FULLSCREEN). 4 WND_PROP_AUTOSIZE = 1, //!<自動大小(can be WINDOW_NORMAL or WINDOW_AUTOSIZE). 5 WND_PROP_ASPECT_RATIO = 2, //!< 保持縱橫比(can be set to WINDOW_FREERATIO or WINDOW_KEEPRATIO). 6 WND_PROP_OPENGL = 3, //!< opengl窗口. 7 WND_PROP_VISIBLE = 4 //!< 檢測窗口是否存在而且是否可見 8 };
三、鼠標事件
1 //! Mouse Events see cv::MouseCallback 2 enum MouseEventTypes { 3 EVENT_MOUSEMOVE = 0, //!< 鼠標在窗口上移動 4 EVENT_LBUTTONDOWN = 1, //!< 鼠標左鍵按下 5 EVENT_RBUTTONDOWN = 2, //!< 鼠標右鍵按下 6 EVENT_MBUTTONDOWN = 3, //!< 鼠標中鍵按下 7 EVENT_LBUTTONUP = 4, //!< 鼠標左鍵鬆開 8 EVENT_RBUTTONUP = 5, //!< 鼠標右鍵鬆開 9 EVENT_MBUTTONUP = 6, //!< 鼠標中鍵鬆開 10 EVENT_LBUTTONDBLCLK = 7, //!< 鼠標左鍵雙擊 11 EVENT_RBUTTONDBLCLK = 8, //!< 鼠標右鍵雙擊 12 EVENT_MBUTTONDBLCLK = 9, //!< 鼠標中鍵雙擊 13 EVENT_MOUSEWHEEL = 10,//!< 正值與負值分別表示鼠標向前與向後滾動 14 EVENT_MOUSEHWHEEL = 11 //!< 正值與負值分別表示鼠標向左與向右滾動 15 };
四、鼠標事件
1 //! Mouse Event Flags see cv::MouseCallback 2 enum MouseEventFlags { 3 EVENT_FLAG_LBUTTON = 1, //!< 鼠標左鍵按下 4 EVENT_FLAG_RBUTTON = 2, //!< 鼠標右鍵按下 5 EVENT_FLAG_MBUTTON = 4, //!< 鼠標中鍵按下 6 EVENT_FLAG_CTRLKEY = 8, //!< CTRL鍵按下 7 EVENT_FLAG_SHIFTKEY = 16,//!< SHIFT鍵按下 8 EVENT_FLAG_ALTKEY = 32 //!< ALT鍵按下 9 };
五、字體粗細
1 //! Qt font weight 2 enum QtFontWeights { 3 QT_FONT_LIGHT = 25, //!< 字體粗細25 4 QT_FONT_NORMAL = 50, //!< 字體粗細50 5 QT_FONT_DEMIBOLD = 63, //!< 字體粗細63 6 QT_FONT_BOLD = 75, //!< 字體粗細75 7 QT_FONT_BLACK = 87 //!< 字體粗細87 8 };
六、字體風格
1 //! Qt font style 2 enum QtFontStyles { 3 QT_STYLE_NORMAL = 0, //!< Normal font. 4 QT_STYLE_ITALIC = 1, //!< Italic font. 5 QT_STYLE_OBLIQUE = 2 //!< Oblique font. 6 };
七、按鈕
1 //! Qt "button" type 2 enum QtButtonTypes { 3 QT_PUSH_BUTTON = 0, //!< 按鈕 4 QT_CHECKBOX = 1, //!< 複選框 5 QT_RADIOBOX = 2, //!< 單選框 6 QT_NEW_BUTTONBAR = 1024 //!< Button should create a new buttonbar 7 };
下面看看四種回調函數:
一、鼠標事件回調函數,用於函數setMouseCallback
typedef void (*MouseCallback)(int event, int x, int y, int flags, void* userdata);
int event
事件類型,值能夠是MouseEventTypes常數:
int x
X軸座標。
int y
Y軸座標。
int flags
事件標誌,值爲MouseEventFlags常量:
void* userdata
用戶返回參數,[可選]
二、軌跡條事件回調函數,用於函數createTrackbar
typedef void (*TrackbarCallback)(int pos, void* userdata);
int pos
軌跡條當前位置
void* userdata
用戶返回參數,[可選]
三、回調函數,用於函數setOpenGlDrawCallback
typedef void (*OpenGlDrawCallback)(void* userdata);
void* userdata
用戶返回參數,[可選]
四、按鈕事件回調函數,用於函數createButton
typedef void (*ButtonCallback)(int state, void* userdata);
int state
當前按鈕狀態,按鈕-1,複選框與單選框爲0或1。
void* userdata
用戶返回參數,[可選]
下面開始說明各個函數的功能。
【namedWindow】
void namedWindow(const String& winname, int flags = WINDOW_AUTOSIZE);
該函數建立一個窗口,而且窗口名稱爲該窗口的惟一標識,若是要建立的窗口名稱已經存在,則該函數什麼也不作。
窗口能夠經過destroyWindow與destroyAllWindows銷燬。
const String& winname
窗口名稱。
int flags
窗口標誌。使用WindowFlags常量:
【destroyWindow】
void destroyWindow(const String& winname);
銷燬由const String& winname指定名稱的窗口。
【destroyAllWindows】
void destroyAllWindows();
銷燬全部窗口。
【startWindowThread】
int startWindowThread();
開始窗口線程。
【waitKey】【waitKeyEx】
int waitKey(int delay = 0); int waitKeyEx(int delay = 0);
等待按鍵按下,並返回按鍵值。waitKeyEx返回的是完整的按鍵值。
int delay爲等待時間。
【imshow】
void imshow(const String& winname, InputArray mat);
在指定的窗口上顯示圖像。
const String& winname
窗口名稱。
InputArray mat
要顯示的圖像。
【resizeWindow】
void resizeWindow(const String& winname, int width, int height); void resizeWindow(const String& winname, const cv::Size& size);
調整窗口大小。
const String& winname
窗口名稱。
int width
新寬度。
int height
新高度。
const cv::Size& size
新窗口大小。
【moveWindow】
void moveWindow(const String& winname, int x, int y);
窗口移動。
const String& winname
窗口名稱。
int x
移動後坐標x
int y
移動後坐標y
【setWindowProperty】
void setWindowProperty(const String& winname, int prop_id, double prop_value);
設置窗口屬性。
const String& winname
窗口名稱。
int prop_id
要更改的窗口化屬性。其值能夠爲WindowPropertyFlags常量:
double prop_value
新窗口屬性值。其值能夠爲WindowFlags常量:
【setWindowTitle】
void setWindowTitle(const String& winname, const String& title);
更新窗口標題。
【getWindowProperty】
double getWindowProperty(const String& winname, int prop_id);
獲取窗口屬性。
const String& winname
窗口名稱。
int prop_id
要獲取的窗口屬性。其值能夠爲WindowPropertyFlags常量:
【setMouseCallback】
void setMouseCallback(const String& winname, MouseCallback onMouse, void* userdata = 0);
對指定窗口設置鼠標處理函數。
const String& winname
窗口名稱。
MouseCallback onMouse
鼠標回調函數。
回調函數定義
typedef void (*MouseCallback)(int event, int x, int y, int flags, void* userdata);
void* userdata
用戶返回數據。
【getMouseWheelDelta】
int getMouseWheelDelta(int flags);
在處理鼠標滾輪事件EVENT_MOUSEWHEEL與EVENT_MOUSEHWHEEL時,返回鼠標的運動增量。對於普通鼠標而言,這個值一般爲120的倍數。
int flags
鼠標返回標誌。
【selectROI】
Rect selectROI(const String& windowName, InputArray img, bool showCrosshair = true, bool fromCenter = false); Rect selectROI(InputArray img, bool showCrosshair = true, bool fromCenter = false);
在給定的圖像上選擇一個ROI區域。該函數建立一個窗口而且容許用戶經過鼠標選擇一個ROI區域,經過空格鍵或Enter鍵結束選擇,經過C鍵取消選擇,取消選擇後返回一個空的矩形框。
const String& windowName
顯示操做過程的窗口名稱。
InputArray img
圖像。
bool showCrosshair
值爲ture時,將顯示矩形框的十字線。
bool fromCenter
值爲ture時,鼠標初始點做爲矩形框的中點;值爲false時,鼠標初始點爲矩形的一個拐角。
【selectROIs】
void selectROIs(const String& windowName, InputArray img, CV_OUT std::vector<Rect>& boundingBoxes, bool showCrosshair = true, bool fromCenter = false);
選擇多個矩形框,與selectROI相似。
【createTrackbar】
int createTrackbar( const String& trackbarname, const String& winname, int* value, int count, TrackbarCallback onChange = 0, void* userdata = 0 );
建立軌跡條。
const String& trackbarname
軌跡條名稱。
const String& winname
顯示軌跡條的窗口名稱。
int* value
軌跡條的當前值。
int count
軌跡條的最大值,最小值總爲0。
TrackbarCallback onChange
軌跡條回調函數。
typedef void (*TrackbarCallback)(int pos, void* userdata);
void* userdata
用戶返回數據。
【getTrackbarPos】
int getTrackbarPos(const String& trackbarname, const String& winname);
獲取軌跡條當前位置。
const String& trackbarname
軌跡條名稱。
const String& winname
窗口名稱。
【setTrackbarPos】
void setTrackbarPos(const String& trackbarname, const String& winname, int pos);
設置軌跡條當前位置。
const String& trackbarname
軌跡條名稱。
const String& winname
窗口名稱。
int pos
軌跡條位置。
【setTrackbarMax】
void setTrackbarMax(const String& trackbarname, const String& winname, int maxval);
設置軌跡條最大值。
const String& trackbarname
軌跡條名稱。
const String& winname
窗口名稱。
int maxval
軌跡條最大值。
【setTrackbarMin】
void setTrackbarMin(const String& trackbarname, const String& winname, int minval);
設置軌跡條最小值。
const String& trackbarname
軌跡條名稱。
const String& winname
窗口名稱。
int minval
軌跡條最小值。
【setOpenGlDrawCallback】
void setOpenGlDrawCallback(const String& winname, OpenGlDrawCallback onOpenGlDraw, void* userdata = 0);
調用回調函數,在圖像最上層繪畫。
const String& winname
窗口名稱。
OpenGlDrawCallback onOpenGlDraw
回調函數。
typedef void (*OpenGlDrawCallback)(void* userdata);
void* userdata
用戶返回數據。
【setOpenGlContext】
void setOpenGlContext(const String& winname);
將制定窗口設定爲openGL的關聯窗口。
【updateWindow】
void updateWindow(const String& winname);
強制窗口從新調用setOpenGlContext。
【QtFont】
struct QtFont { const char* nameFont; //!< 字體名稱 Scalar color; //!< 字體顏色 int font_face; //!< 字體風格 const int* ascii; //!< 字體粗細 const int* greek; const int* cyrillic; float hscale, vscale; float shear; //!< slope coefficient: 0 - normal, >0 - italic int thickness; //!< See cv::QtFontWeights float dx; //!< horizontal interval between letters int line_type; //!< PointSize };
字體格式。
【addText】
void addText( const Mat& img, const String& text, Point org, const QtFont& font);
在指定圖像上添加文字。
【displayOverlay】
void displayOverlay(const String& winname, const String& text, int delayms = 0);
顯示圖像overlay文本。
【displayStatusBar】
void displayStatusBar(const String& winname, const String& text, int delayms = 0);
顯示狀態欄文本。
【saveWindowParameters】
void saveWindowParameters(const String& windowName);
保存指定窗口的參數。
【loadWindowParameters】
void loadWindowParameters(const String& windowName);
加載指定窗口的參數。
【createButton】
int createButton( const String& bar_name, ButtonCallback on_change, void* userdata = 0, int type = QT_PUSH_BUTTON, bool initial_button_state = false );
建立按鈕。
const String& bar_name
用於建立按鈕的窗口名稱。
ButtonCallback on_change
按鈕回調函數。
typedef void (*ButtonCallback)(int state, void* userdata);
void* userdata
用戶返回數據。
int type
按鈕類型。
bool initial_button_state
按鈕初始值。