OpenCV 4.13.0
開源計算機視覺庫 (Open Source Computer Vision)
正在載入...
正在搜尋...
未找到匹配項
高階GUI

主題

 與建立和操作HighGUI視窗以及滑鼠事件相關的標誌
 
 OpenGL支援
 
 Qt新函式
 
 WinRT支援
 

詳細說明

OpenCV設計用於在完整的應用程式中使用,並且可以在功能豐富的UI框架(如Qt*、WinForms*或Cocoa*)中或完全不使用UI的情況下使用。但有時需要快速嘗試功能並可視化結果。這就是HighGUI模組的設計目的。

它提供了簡單的介面來

型別定義 (Typedefs)

typedef void(* cv::ButtonCallback) (int state, void *userdata)
 cv::createButton建立的按鈕的回撥函式。
 
typedef void(* cv::MouseCallback) (int event, int x, int y, int flags, void *userdata)
 滑鼠事件的回撥函式。參見cv::setMouseCallback
 
typedef void(* cv::OpenGlDrawCallback) (void *userdata)
 定義用於在每一幀中呼叫的回撥函式。參見cv::setOpenGlDrawCallback
 
typedef void(* cv::TrackbarCallback) (int pos, void *userdata)
 滑塊的回撥函式。參見cv::createTrackbar
 

函式

int cv::createTrackbar (const String &trackbarname, const String &winname, int *value, int count, TrackbarCallback onChange=0, void *userdata=0)
 建立一個軌跡條並將其附加到指定的視窗。
 
const std::string cv::currentUIFramework ()
 正在使用的高階GUI後端。
 
void cv::destroyAllWindows ()
 銷燬所有 HighGUI 視窗。
 
void cv::destroyWindow (const String &winname)
 銷燬指定視窗。
 
int cv::getMouseWheelDelta (int flags)
 獲取滑鼠滾輪移動的增量,在處理滑鼠滾輪事件cv::EVENT_MOUSEWHEELcv::EVENT_MOUSEHWHEEL時。
 
int cv::getTrackbarPos (const String &trackbarname, const String &winname)
 返回跟蹤條位置。
 
Rect cv::getWindowImageRect (const String &winname)
 提供視窗中影像的矩形區域。
 
double cv::getWindowProperty (const String &winname, int prop_id)
 提供視窗的引數。
 
void cv::imshow (const String &winname, InputArray mat)
 在指定視窗中顯示影像。
 
void cv::moveWindow (const String &winname, int x, int y)
 將視窗移動到指定位置。
 
void cv::namedWindow (const String &winname, int flags=WINDOW_AUTOSIZE)
 建立視窗。
 
int cv::pollKey ()
 輪詢按下的鍵。
 
void cv::resizeWindow (const String &winname, const cv::Size &size)
 
void cv::resizeWindow (const String &winname, int width, int height)
 將視窗調整到指定大小。
 
Rect cv::selectROI (const String &windowName, InputArray img, bool showCrosshair=true, bool fromCenter=false, bool printNotice=true)
 允許使用者在給定影像上選擇一個ROI。
 
Rect cv::selectROI (InputArray img, bool showCrosshair=true, bool fromCenter=false, bool printNotice=true)
 
void cv::selectROIs (const String &windowName, InputArray img, std::vector< Rect > &boundingBoxes, bool showCrosshair=true, bool fromCenter=false, bool printNotice=true)
 允許使用者在給定影像上選擇多個ROI。
 
void cv::setMouseCallback (const String &winname, MouseCallback onMouse, void *userdata=0)
 為指定的視窗設定滑鼠處理程式。
 
void cv::setTrackbarMax (const String &trackbarname, const String &winname, int maxval)
 設定滑塊的最大位置。
 
void cv::setTrackbarMin (const String &trackbarname, const String &winname, int minval)
 設定滑塊的最小位置。
 
void cv::setTrackbarPos (const String &trackbarname, const String &winname, int pos)
 設定軌跡條位置。
 
void cv::setWindowProperty (const String &winname, int prop_id, double prop_value)
 動態更改視窗的引數。
 
void cv::setWindowTitle (const String &winname, const String &title)
 更新視窗標題。
 
int cv::startWindowThread ()
 
int cv::waitKey (int delay=0)
 等待按鍵操作。
 
int cv::waitKeyEx (int delay=0)
 類似於waitKey,但返回完整的按鍵程式碼。
 

型別定義文件 (Typedef Documentation)

◆ ButtonCallback

typedef void(* cv::ButtonCallback) (int state, void *userdata)

#include <opencv2/highgui.hpp>

cv::createButton建立的按鈕的回撥函式。

引數
state按鈕的當前狀態。對於按鈕,它可以是-1;對於複選框/單選按鈕,可以是0或1。
userdata可選引數。

◆ MouseCallback

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

#include <opencv2/highgui.hpp>

滑鼠事件的回撥函式。參見cv::setMouseCallback

引數
事件cv::MouseEventTypes常量之一。
x滑鼠事件的x座標。
y滑鼠事件的y座標。
flags (標誌)cv::MouseEventFlags常量之一。
userdata可選引數。

◆ OpenGlDrawCallback

typedef void(* cv::OpenGlDrawCallback) (void *userdata)

#include <opencv2/highgui.hpp>

定義用於在每一幀中呼叫的回撥函式。參見cv::setOpenGlDrawCallback

引數
userdata可選引數。

◆ TrackbarCallback

typedef void(* cv::TrackbarCallback) (int pos, void *userdata)

#include <opencv2/highgui.hpp>

滑塊的回撥函式。參見cv::createTrackbar

引數
pos指定滑塊的當前位置。
userdata可選引數。

函式文件 (Function Documentation)

◆ createTrackbar()

int cv::createTrackbar ( const String & 滑塊名稱,
const String & 視窗名稱,
int * value (值),
int count,
TrackbarCallback onChange=0,
void * userdata=0 )

#include <opencv2/highgui.hpp>

建立一個軌跡條並將其附加到指定的視窗。

createTrackbar函式建立一個指定名稱和範圍的滑塊(滑塊或範圍控制元件),將一個整數變數值設定為與滑塊同步的位置,並指定onChange回撥函式,該函式將在滑塊位置更改時呼叫。建立的滑塊顯示在指定的winname視窗中。

注意
[僅限Qt後端] 如果滑塊應附加到控制元件面板,則winname可以為空。

透過單擊每個滑塊的標籤,可以手動編輯滑塊的值。

引數
滑塊名稱建立的滑塊的名稱。
視窗名稱將包含滑塊的視窗的名稱。
value (值)指向將由滑塊更改的整數值的指標。如果未使用值指標,則傳遞nullptr。在這種情況下,請在回撥函式中手動處理滑塊位置。
count滑塊的最大位置。
onChange每次滑塊位置更改時呼叫的函式的指標。此函式應具有原型void Foo(int, void*);,其中第一個引數是滑塊位置,第二個引數是使用者資料(請參見下一個引數)。如果回撥為nullptr,則不呼叫回撥,但滑塊的值仍會自動更新。
userdata傳遞給回撥的可選使用者資料。
注意
如果value指標為nullptr,則必須手動管理滑塊位置。使用所需的初始值手動呼叫回撥函式,以避免執行時警告。
另請參閱
向我們的應用程式新增滑塊!

◆ currentUIFramework()

const std::string cv::currentUIFramework ( )
Python
cv.currentUIFramework() -> retval

#include <opencv2/highgui.hpp>

正在使用的高階GUI後端。

該函式返回正在使用的高階GUI後端名稱:可以是COCOA、GTK2/3、QT、WAYLAND或WIN32。如果沒有可用的UI後端,則返回空字串。

◆ destroyAllWindows()

void cv::destroyAllWindows ( )
Python
cv.destroyAllWindows() -> None

#include <opencv2/highgui.hpp>

銷燬所有 HighGUI 視窗。

destroyAllWindows函式銷燬所有已開啟的高階GUI視窗。

◆ destroyWindow()

void cv::destroyWindow ( const String & 視窗名稱)
Python
cv.destroyWindow(視窗名稱) -> None

#include <opencv2/highgui.hpp>

銷燬指定視窗。

destroyWindow函式銷燬具有給定名稱的視窗。

引數
視窗名稱要銷燬的視窗的名稱。

◆ getMouseWheelDelta()

int cv::getMouseWheelDelta ( int flags (標誌))

#include <opencv2/highgui.hpp>

獲取滑鼠滾輪移動的增量,在處理滑鼠滾輪事件cv::EVENT_MOUSEWHEELcv::EVENT_MOUSEHWHEEL時。

對於普通的滑鼠滾輪,增量將是120的倍數。值為120對應於滾輪的一個刻度旋轉或操作的閾值,並且每次增量應發生一次此類操作。一些具有更高解析度自由旋轉滾輪的高精度滑鼠可能會生成較小的值。

對於cv::EVENT_MOUSEWHEEL,正值和負值分別表示向前和向後滾動。對於cv::EVENT_MOUSEHWHEEL(如果可用),正值和負值分別表示向右和向左滾動。

注意
滑鼠滾輪事件目前僅在Windows和Cocoa上支援。
引數
flags (標誌)滑鼠回撥標誌引數。

◆ getTrackbarPos()

int cv::getTrackbarPos ( const String & 滑塊名稱,
const String & 視窗名稱 )
Python
cv.getTrackbarPos(滑塊名稱, 視窗名稱) -> retval

#include <opencv2/highgui.hpp>

返回跟蹤條位置。

getTrackbarPos函式返回指定滑塊的當前位置。

注意
[僅限Qt後端] 如果滑塊附加到控制元件面板,則winname可以為空。
引數
滑塊名稱滑塊的名稱。
視窗名稱滑塊父視窗的名稱。

◆ getWindowImageRect()

Rect cv::getWindowImageRect ( const String & 視窗名稱)
Python
cv.getWindowImageRect(視窗名稱) -> retval

#include <opencv2/highgui.hpp>

提供視窗中影像的矩形區域。

getWindowImageRect函式返回影像渲染區域的客戶端螢幕座標、寬度和高度。

引數
視窗名稱視窗的名稱。
另請參閱
resizeWindow moveWindow
注意
[僅限Wayland後端] 此函式不受Wayland協議限制的支援。

◆ getWindowProperty()

double cv::getWindowProperty ( const String & 視窗名稱,
int 屬性ID )
Python
cv.getWindowProperty(winname, prop_id) -> retval

#include <opencv2/highgui.hpp>

提供視窗的引數。

getWindowProperty函式返回視窗的屬性。

引數
視窗名稱視窗的名稱。
屬性ID要檢索的視窗屬性。以下操作標誌可用:(cv::WindowPropertyFlags)
另請參閱
setWindowProperty
注意
[僅限Wayland後端] 此函式不受支援。

◆ imshow()

void cv::imshow ( const String & 視窗名稱,
InputArray mat )
Python
cv.imshow(winname, mat) -> None

#include <opencv2/highgui.hpp>

在指定視窗中顯示影像。

imshow函式在指定的視窗中顯示影像。如果視窗是使用cv::WINDOW_AUTOSIZE標誌建立的,則影像以其原始大小顯示,但仍受螢幕解析度的限制。否則,影像將被縮放到適合視窗。該函式可能會根據其深度縮放影像

  • 如果影像是8位無符號整數,則按原樣顯示。
  • 如果影像是16位無符號整數,則畫素值除以256。即,值範圍[0,255*256]對映到[0,255]。
  • 如果影像是32位或64位浮點數,則畫素值乘以255。即,值範圍[0,1]對映到[0,255]。
  • 32位整數影像由於所需的轉換模糊不清,不再進行處理。使用特定於影像上下文的自定義預處理將其轉換為8位無符號矩陣。

如果視窗是用OpenGL支援建立的,cv::imshow也支援ogl::Bufferogl::Texture2Dcuda::GpuMat作為輸入。

如果視窗在此函式之前未建立,則假定使用cv::WINDOW_AUTOSIZE建立視窗。

如果要顯示比螢幕解析度大的影像,則需要在imshow之前呼叫namedWindow("", WINDOW_NORMAL)。

注意
此函式後應呼叫cv::waitKeycv::pollKey以執行實際顯示給定影像並使視窗響應滑鼠和鍵盤事件所需GUI維護任務。否則,它將不會顯示影像,並且視窗可能會鎖定。例如,waitKey(0)將無限期地顯示視窗,直到按下任意鍵(適合顯示影像)。waitKey(25)將顯示一幀並等待大約25毫秒以按鍵(適合逐幀顯示影片)。要刪除視窗,請使用cv::destroyWindow
[僅限Windows後端] 按下Ctrl+C會將影像複製到剪貼簿。按下Ctrl+S將顯示一個儲存影像的對話方塊。
[僅限Wayland後端] 支援的格式已擴充套件。
  • 如果影像是8位有符號整數,則畫素值會偏置128。即,值範圍[-128,127]對映到[0,255]。
  • 如果影像是16位有符號整數,則畫素值除以256並偏置128。即,值範圍[-32768,32767]對映到[0,255]。
引數
視窗名稱視窗的名稱。
mat要顯示的影像。

◆ moveWindow()

void cv::moveWindow ( const String & 視窗名稱,
int x,
int y )
Python
cv.moveWindow(winname, x, y) -> None

#include <opencv2/highgui.hpp>

將視窗移動到指定位置。

引數
視窗名稱視窗的名稱。
x視窗的新x座標。
y視窗的新y座標。
注意
[僅限Wayland後端] 此函式不受Wayland協議限制的支援。

◆ namedWindow()

void cv::namedWindow ( const String & 視窗名稱,
int flags=WINDOW_AUTOSIZE )
Python
cv.namedWindow(winname[, flags]) -> None

#include <opencv2/highgui.hpp>

建立視窗。

namedWindow函式建立一個視窗,該視窗可用作影像和滑塊的佔位符。建立的視窗透過其名稱進行引用。

如果同名視窗已存在,則函式不執行任何操作。

您可以呼叫cv::destroyWindowcv::destroyAllWindows來關閉視窗並釋放任何相關的記憶體使用。對於簡單的程式,您不必呼叫這些函式,因為應用程式的所有資源和視窗都會在退出時由作業系統自動關閉。

注意
Qt後端支援附加標誌
  • WINDOW_NORMAL或WINDOW_AUTOSIZE: WINDOW_NORMAL允許您調整視窗大小,而WINDOW_AUTOSIZE則自動調整視窗大小以適應顯示的影像(請參閱imshow),您無法手動更改視窗大小。
  • WINDOW_FREERATIO或WINDOW_KEEPRATIO: WINDOW_FREERATIO在不考慮影像比例的情況下調整影像,而WINDOW_KEEPRATIO則保持影像比例。
  • WINDOW_GUI_NORMAL或WINDOW_GUI_EXPANDED: WINDOW_GUI_NORMAL是繪製沒有狀態列和工具欄的舊視窗方式,而WINDOW_GUI_EXPANDED是新的增強GUI。預設情況下,flags == WINDOW_AUTOSIZE | WINDOW_KEEPRATIO | WINDOW_GUI_EXPANDED
引數
視窗名稱視窗名稱,可用作視窗識別符號。
flags (標誌)視窗的標誌。支援的標誌為:(cv::WindowFlags)

◆ pollKey()

int cv::pollKey ( )
Python
cv.pollKey() -> retval

#include <opencv2/highgui.hpp>

輪詢按下的鍵。

pollKey函式在不等待的情況下輪詢按鍵事件。它返回按下鍵的程式碼,如果沒有自上次呼叫以來沒有按下鍵,則返回-1。要等待直到按鍵按下,請使用waitKey

注意
waitKeypollKey函式是HighGUI中唯一可以獲取和處理GUI事件的方法,因此除非HighGUI在負責事件處理的環境中使用,否則需要定期呼叫其中一個。
該函式僅在至少建立一個高階GUI視窗且該視窗處於活動狀態時才有效。如果有多個高階GUI視窗,任何一個都可以是活動的。

◆ resizeWindow() [1/2]

void cv::resizeWindow ( const String & 視窗名稱,
const cv::Size & size (大小) )
Python
cv.resizeWindow(winname, width, height) -> None
cv.resizeWindow(winname, size) -> None

#include <opencv2/highgui.hpp>

這是一個過載的成員函式,為方便起見而提供。它與上述函式的區別僅在於所接受的引數不同。

引數
視窗名稱視窗名稱。
size (大小)新的視窗大小。

◆ resizeWindow() [2/2]

void cv::resizeWindow ( const String & 視窗名稱,
int width,
int height )
Python
cv.resizeWindow(winname, width, height) -> None
cv.resizeWindow(winname, size) -> None

#include <opencv2/highgui.hpp>

將視窗調整到指定大小。

注意
指定的視窗大小是指影像區域。不包括工具欄。只有沒有cv::WINDOW_AUTOSIZE標誌建立的窗口才能調整大小。
引數
視窗名稱視窗名稱。
width新視窗寬度。
height新視窗高度。

◆ selectROI() [1/2]

Rect cv::selectROI ( const String & 視窗名稱,
InputArray img,
bool showCrosshair=true,
bool fromCenter=false,
bool printNotice=true )
Python
cv.selectROI(windowName, img[, showCrosshair[, fromCenter[, printNotice]]]) -> retval
cv.selectROI(img[, showCrosshair[, fromCenter[, printNotice]]]) -> retval

#include <opencv2/highgui.hpp>

允許使用者在給定影像上選擇一個ROI。

該函式建立一個視窗,並允許使用者使用滑鼠選擇一個ROI。控制元件:使用spaceenter完成選擇,使用鍵c取消選擇(函式將返回一個零cv::Rect)。

引數
視窗名稱顯示選擇過程的視窗名稱。
img要選擇ROI的影像。
顯示十字線如果為true,將顯示選擇矩形的十字線。
從中心開始如果為true,則選擇的中心將與初始滑鼠位置匹配。相反,選擇矩形的一個角將對應於初始滑鼠位置。
列印通知如果為true,將在控制檯中列印關於選擇ROI或取消選擇的通知。
返回
選定的ROI或如果取消選擇則為空矩形。
注意
該函式使用cv::setMouseCallback(windowName, ...)為指定的視窗設定自己的滑鼠回撥。工作完成後,將為使用的視窗設定一個空的呼叫。

◆ selectROI() [2/2]

Rect cv::selectROI ( InputArray img,
bool showCrosshair=true,
bool fromCenter=false,
bool printNotice=true )
Python
cv.selectROI(windowName, img[, showCrosshair[, fromCenter[, printNotice]]]) -> retval
cv.selectROI(img[, showCrosshair[, fromCenter[, printNotice]]]) -> retval

#include <opencv2/highgui.hpp>

這是一個過載的成員函式,為方便起見而提供。它與上述函式的區別僅在於所接受的引數不同。

◆ selectROIs()

void cv::selectROIs ( const String & 視窗名稱,
InputArray img,
std::vector< Rect > & 邊界框,
bool showCrosshair=true,
bool fromCenter=false,
bool printNotice=true )
Python
cv.selectROIs(windowName, img[, showCrosshair[, fromCenter[, printNotice]]]) -> 邊界框

#include <opencv2/highgui.hpp>

允許使用者在給定影像上選擇多個ROI。

該函式建立一個視窗,並允許使用者使用滑鼠選擇多個ROI。控制元件:使用spaceenter完成當前選擇並開始新的選擇,使用esc終止多ROI選擇過程。

引數
視窗名稱顯示選擇過程的視窗名稱。
img要選擇ROI的影像。
邊界框選定的ROI。
顯示十字線如果為true,將顯示選擇矩形的十字線。
從中心開始如果為true,則選擇的中心將與初始滑鼠位置匹配。相反,選擇矩形的一個角將對應於初始滑鼠位置。
列印通知如果為true,將在控制檯中列印關於選擇ROI或取消選擇的通知。
注意
該函式使用cv::setMouseCallback(windowName, ...)為指定的視窗設定自己的滑鼠回撥。工作完成後,將為使用的視窗設定一個空的呼叫。

◆ setMouseCallback()

void cv::setMouseCallback ( const String & 視窗名稱,
MouseCallback onMouse,
void * userdata=0 )

#include <opencv2/highgui.hpp>

為指定的視窗設定滑鼠處理程式。

引數
視窗名稱視窗的名稱。
onMouse滑鼠事件的回撥函式。請參閱OpenCV示例,瞭解如何指定和使用回撥。
userdata傳遞給回撥的可選引數。

◆ setTrackbarMax()

void cv::setTrackbarMax ( const String & 滑塊名稱,
const String & 視窗名稱,
int 最大值 (maxval) )
Python
cv.setTrackbarMax(滑塊名稱, 視窗名稱, 最大值) -> None

#include <opencv2/highgui.hpp>

設定滑塊的最大位置。

setTrackbarMax函式設定指定視窗中指定滑塊的最大位置。

注意
[僅限Qt後端] 如果滑塊附加到控制元件面板,則winname可以為空。
引數
滑塊名稱滑塊的名稱。
視窗名稱滑塊父視窗的名稱。
最大值 (maxval)新的最大位置。

◆ setTrackbarMin()

void cv::setTrackbarMin ( const String & 滑塊名稱,
const String & 視窗名稱,
int 最小值 )
Python
cv.setTrackbarMin(滑塊名稱, 視窗名稱, 最小值) -> None

#include <opencv2/highgui.hpp>

設定滑塊的最小位置。

setTrackbarMin函式設定指定視窗中指定滑塊的最小位置。

注意
[僅限Qt後端] 如果滑塊附加到控制元件面板,則winname可以為空。
引數
滑塊名稱滑塊的名稱。
視窗名稱滑塊父視窗的名稱。
最小值新的最小位置。

◆ setTrackbarPos()

void cv::setTrackbarPos ( const String & 滑塊名稱,
const String & 視窗名稱,
int pos )
Python
cv.setTrackbarPos(滑塊名稱, 視窗名稱, 位置) -> None

#include <opencv2/highgui.hpp>

設定軌跡條位置。

setTrackbarPos函式設定指定視窗中指定滑塊的位置。

注意
[僅限Qt後端] 如果滑塊附加到控制元件面板,則winname可以為空。
引數
滑塊名稱滑塊的名稱。
視窗名稱滑塊父視窗的名稱。
pos新位置。

◆ setWindowProperty()

void cv::setWindowProperty ( const String & 視窗名稱,
int 屬性ID,
double 屬性值 )
Python
cv.setWindowProperty(winname, prop_id, prop_value) -> None

#include <opencv2/highgui.hpp>

動態更改視窗的引數。

setWindowProperty函式允許更改視窗的屬性。

引數
視窗名稱視窗的名稱。
屬性ID要編輯的視窗屬性。支援的操作標誌為:(cv::WindowPropertyFlags)
屬性值視窗屬性的新值。支援的標誌為:(cv::WindowFlags)
注意
[僅限Wayland後端] 此函式不受支援。

◆ setWindowTitle()

void cv::setWindowTitle ( const String & 視窗名稱,
const String & 標題 )
Python
cv.setWindowTitle(winname, title) -> None

#include <opencv2/highgui.hpp>

更新視窗標題。

引數
視窗名稱視窗的名稱。
標題新標題。

◆ startWindowThread()

int cv::startWindowThread ( )
Python
cv.startWindowThread() -> retval

#include <opencv2/highgui.hpp>

◆ waitKey()

int cv::waitKey ( int delay=0)
Python
cv.waitKey([, delay]) -> retval

#include <opencv2/highgui.hpp>

等待按鍵操作。

waitKey函式無限期地(當 \(\texttt{delay}\leq 0\) 時)或在指定毫秒數(當為正數時)內等待按鍵事件。由於作業系統線上程切換之間有最小時間間隔,該函式不會正好等待delay毫秒,它至少會等待delay毫秒,具體取決於當時您的計算機上正在執行的其他任務。它返回按下鍵的程式碼,如果指定的時限內沒有按鍵按下,則返回-1。要檢查按鍵但不要等待,請使用pollKey

注意
waitKeypollKey函式是HighGUI中唯一可以獲取和處理GUI事件的方法,因此除非HighGUI在負責事件處理的環境中使用,否則需要定期呼叫其中一個。
該函式僅在至少建立一個高階GUI視窗且該視窗處於活動狀態時才有效。如果有多個高階GUI視窗,任何一個都可以是活動的。
引數
延遲延遲(以毫秒為單位)。0是特殊值,表示“永遠”。

◆ waitKeyEx()

int cv::waitKeyEx ( int delay=0)
Python
cv.waitKeyEx([, delay]) -> retval

#include <opencv2/highgui.hpp>

類似於waitKey,但返回完整的按鍵程式碼。

注意
按鍵程式碼是實現特定的,並且取決於使用的後端:QT/GTK/Win32/等