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

 

 在筆記二中咱們已經知道了,在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常數:

  •        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

用戶返回參數,[可選]


二、軌跡條事件回調函數,用於函數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常量:

  •        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

按鈕初始值。

相關文章
相關標籤/搜索