標籤:

【opencv學習筆記四】opencv3.4.0圖形用戶介面highgui函數解析

在筆記二中我們已經知道了,在highgui文件夾下的正是opencv圖形用戶介面功能結構,我們這篇博客所說的便是D:Program

Filesopencv340opencvuildincludeopencv2highguihighgui.hpp中的函數了。

目錄

【namedWindow】

【destroyWindow】

【destroyAllWindows】

【startWindowThread】

【waitKeyEx】

【waitKey】

【imshow】

【resizeWindow】

【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::namedWindowenum WindowFlags { WINDOW_NORMAL = 0x00000000, //!< 用戶可自由調整大小 WINDOW_AUTOSIZE = 0x00000001, //!< 窗口尺寸由圖像決定,用戶不可調節 WINDOW_OPENGL = 0x00001000, //!< opengl支持的窗口 WINDOW_FULLSCREEN = 1, //!< 全屏 WINDOW_FREERATIO = 0x00000100, //!< 最大化,不受圖片縱橫比影響 WINDOW_KEEPRATIO = 0x00000000, //!< 保持圖像縱橫比不變 WINDOW_GUI_EXPANDED=0x00000000, //!< 狀態條與工具條 WINDOW_GUI_NORMAL = 0x00000010, //!< old fashious way };

2、窗口屬性:

//! Flags for cv::setWindowProperty / cv::getWindowPropertyenum WindowPropertyFlags { WND_PROP_FULLSCREEN = 0, //!< 全屏(can be WINDOW_NORMAL or WINDOW_FULLSCREEN). WND_PROP_AUTOSIZE = 1, //!<自動大小(can be WINDOW_NORMAL or WINDOW_AUTOSIZE). WND_PROP_ASPECT_RATIO = 2, //!< 保持縱橫比(can be set to WINDOW_FREERATIO or WINDOW_KEEPRATIO). WND_PROP_OPENGL = 3, //!< opengl窗口. WND_PROP_VISIBLE = 4 //!< 檢測窗口是否存在並且是否可見 };

3、滑鼠事件

//! Mouse Events see cv::MouseCallbackenum MouseEventTypes { EVENT_MOUSEMOVE = 0, //!< 滑鼠在窗口上移動 EVENT_LBUTTONDOWN = 1, //!< 滑鼠左鍵按下 EVENT_RBUTTONDOWN = 2, //!< 滑鼠右鍵按下 EVENT_MBUTTONDOWN = 3, //!< 滑鼠中鍵按下 EVENT_LBUTTONUP = 4, //!< 滑鼠左鍵鬆開 EVENT_RBUTTONUP = 5, //!< 滑鼠右鍵鬆開 EVENT_MBUTTONUP = 6, //!< 滑鼠中鍵鬆開 EVENT_LBUTTONDBLCLK = 7, //!< 滑鼠左鍵雙擊 EVENT_RBUTTONDBLCLK = 8, //!< 滑鼠右鍵雙擊 EVENT_MBUTTONDBLCLK = 9, //!< 滑鼠中鍵雙擊 EVENT_MOUSEWHEEL = 10,//!< 正值與負值分別表示滑鼠向前與向後滾動 EVENT_MOUSEHWHEEL = 11 //!< 正值與負值分別表示滑鼠向左與向右滾動 };

4、滑鼠事件

//! Mouse Event Flags see cv::MouseCallbackenum MouseEventFlags { EVENT_FLAG_LBUTTON = 1, //!< 滑鼠左鍵按下 EVENT_FLAG_RBUTTON = 2, //!< 滑鼠右鍵按下 EVENT_FLAG_MBUTTON = 4, //!< 滑鼠中鍵按下 EVENT_FLAG_CTRLKEY = 8, //!< CTRL鍵按下 EVENT_FLAG_SHIFTKEY = 16,//!< SHIFT鍵按下 EVENT_FLAG_ALTKEY = 32 //!< ALT鍵按下 };

5、字體粗細

//! Qt font weightenum QtFontWeights { QT_FONT_LIGHT = 25, //!< 字體粗細25 QT_FONT_NORMAL = 50, //!< 字體粗細50 QT_FONT_DEMIBOLD = 63, //!< 字體粗細63 QT_FONT_BOLD = 75, //!< 字體粗細75 QT_FONT_BLACK = 87 //!< 字體粗細87 };

6、字體風格

//! Qt font styleenum QtFontStyles { QT_STYLE_NORMAL = 0, //!< Normal font. QT_STYLE_ITALIC = 1, //!< Italic font. QT_STYLE_OBLIQUE = 2 //!< Oblique font. };

7、按鈕

//! Qt "button" typeenum QtButtonTypes { QT_PUSH_BUTTON = 0, //!< 按鈕 QT_CHECKBOX = 1, //!< 複選框 QT_RADIOBOX = 2, //!< 單選框 QT_NEW_BUTTONBAR = 1024 //!< Button should create a new buttonbar };

下面看看四種回調函數:

1、滑鼠事件回調函數,用於函數setMouseCallback

typedef void (*MouseCallback)(int event, int x, int y, int flags, void* userdata);

int event

事件類型,值可以是MouseEventTypes常數:

  • EVENT_MOUSEMOVE = 0, //!< 滑鼠在窗口上移動
  • EVENT_LBUTTONDOWN = 1, //!< 滑鼠左鍵按下
  • EVENT_RBUTTONDOWN = 2, //!< 滑鼠右鍵按下
  • EVENT_MBUTTONDOWN = 3, //!< 滑鼠中鍵按下
  • EVENT_LBUTTONUP = 4, //!< 滑鼠左鍵鬆開
  • EVENT_RBUTTONUP = 5, //!< 滑鼠右鍵鬆開
  • EVENT_MBUTTONUP = 6, //!< 滑鼠中鍵鬆開
  • EVENT_LBUTTONDBLCLK = 7, //!< 滑鼠左鍵雙擊
  • EVENT_RBUTTONDBLCLK = 8, //!< 滑鼠右鍵雙擊
  • EVENT_MBUTTONDBLCLK = 9, //!< 滑鼠中鍵雙擊
  • EVENT_MOUSEWHEEL = 10,//!< 正值與負值分別表示滑鼠向前與向後滾動
  • EVENT_MOUSEHWHEEL = 11 //!< 正值與負值分別表示滑鼠向左與向右滾動

int x

X軸坐標。

int y

Y軸坐標。

int flags

事件標誌,值為MouseEventFlags常量:

  • EVENT_FLAG_LBUTTON = 1, //!< 滑鼠左鍵按下
  • EVENT_FLAG_RBUTTON = 2, //!< 滑鼠右鍵按下
  • EVENT_FLAG_MBUTTON = 4, //!< 滑鼠中鍵按下
  • EVENT_FLAG_CTRLKEY = 8, //!< CTRL鍵按下
  • EVENT_FLAG_SHIFTKEY = 16,//!< SHIFT鍵按下
  • EVENT_FLAG_ALTKEY = 32 //!< ALT鍵按下

void* userdata

用戶返回參數,[可選]

2、軌跡條事件回調函數,用於函數createTrackbar

typedef void (*TrackbarCallback)(int pos, void* userdata);

int pos

軌跡條當前位置

void* userdata

用戶返回參數,[可選]

3、回調函數,用於函數setOpenGlDrawCallback

typedef void (*OpenGlDrawCallback)(void* userdata);

void* userdata

用戶返回參數,[可選]

4、按鈕事件回調函數,用於函數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常量:

  • WINDOW_NORMAL = 0x00000000, //!< 用戶可自由調整大小
  • WINDOW_AUTOSIZE = 0x00000001, //!< 窗口尺寸由圖像決定,用戶不可調節
  • WINDOW_OPENGL = 0x00001000, //!< opengl支持的窗口
  • WINDOW_FULLSCREEN = 1, //!< 全屏
  • WINDOW_FREERATIO = 0x00000100, //!< 最大化,不受圖片縱橫比影響
  • WINDOW_KEEPRATIO = 0x00000000, //!< 保持圖像縱橫比不變
  • WINDOW_GUI_EXPANDED=0x00000000, //!< 狀態條與工具條
  • WINDOW_GUI_NORMAL = 0x00000010, //!< old fashious way

【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常量:

  • WND_PROP_FULLSCREEN = 0, //!< 全屏(can be WINDOW_NORMAL or WINDOW_FULLSCREEN).
  • WND_PROP_AUTOSIZE = 1, //!<自動大小(can be WINDOW_NORMAL or WINDOW_AUTOSIZE).
  • WND_PROP_ASPECT_RATIO = 2, //!< 保持縱橫比(can be set to WINDOW_FREERATIO or WINDOW_KEEPRATIO).
  • WND_PROP_OPENGL = 3, //!< opengl窗口.
  • WND_PROP_VISIBLE = 4 //!< 檢測窗口是否存在並且是否可見

double prop_value

新窗口屬性值。其值可以為WindowFlags常量:

  • WINDOW_NORMAL = 0x00000000, //!< 用戶可自由調整大小
  • WINDOW_AUTOSIZE = 0x00000001, //!< 窗口尺寸由圖像決定,用戶不可調節
  • WINDOW_OPENGL = 0x00001000, //!< opengl支持的窗口
  • WINDOW_FULLSCREEN = 1, //!< 全屏
  • WINDOW_FREERATIO = 0x00000100, //!< 最大化,不受圖片縱橫比影響
  • WINDOW_KEEPRATIO = 0x00000000, //!< 保持圖像縱橫比不變
  • WINDOW_GUI_EXPANDED=0x00000000, //!< 狀態條與工具條
  • WINDOW_GUI_NORMAL = 0x00000010, //!< old fashious way

【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常量:

  • WND_PROP_FULLSCREEN = 0, //!< 全屏(can be WINDOW_NORMAL or WINDOW_FULLSCREEN).
  • WND_PROP_AUTOSIZE = 1, //!<自動大小(can be WINDOW_NORMAL or WINDOW_AUTOSIZE).
  • WND_PROP_ASPECT_RATIO = 2, //!< 保持縱橫比(can be set to WINDOW_FREERATIO or WINDOW_KEEPRATIO).
  • WND_PROP_OPENGL = 3, //!< opengl窗口.
  • WND_PROP_VISIBLE = 4 //!< 檢測窗口是否存在並且是否可見

【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

按鈕初始值。


推薦閱讀:

做增強現實AR,高通sdk與opencv有什麼區別。各有什麼利弊?
OpenCV 與 OpenGL 的關係是什麼?
1.25【OpenCV圖像處理】直方圖反向投影
關於MFC是否out了的問題?

TAG:OpenCV |