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


 

 在筆記二中我們已經知道了,在highgui文件夾下的正是opencv圖形用戶接口功能結構,我們這篇博客所說的便是D:\Program Files\opencv340\opencv\build\include\opencv2\highgui\highgui.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、窗口標志:

 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     };

 


2、窗口屬性:

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      };

 


3、鼠標事件

 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      };

 


4、鼠標事件

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      };

 


5、字體粗細

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      };

 

6、字體風格

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      };


7、按鈕

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      };

 


下面看看四種回調函數:

 

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

按鈕初始值。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM