HighGUI參考手冊
中文翻譯者:
TODO
創(chuàng)建窗口
int cvNamedWindow( const char* name, int flags );
- name
- 窗口的名字,它被用來區(qū)分不同的窗口,并被顯示為窗口標題。
- flags
- 窗口屬性標志。目前唯一支持的標志是
CV_WINDOW_AUTOSIZE 。
當(dāng)這個標志被設(shè)置后,如果用戶不能手動改變窗口大小,窗口大小會自動調(diào)整以適合被顯示圖像
(參考cvShowImage)。
函數(shù)cvNamedWindow 創(chuàng)建一個可以放置圖像和trackbar的窗口。
被創(chuàng)建的窗口可以通過它們的名字被引用。
如果已經(jīng)存在這個名字的窗口,這個函數(shù)將不做任何事情。
銷毀一個窗口
void cvDestroyWindow( const char* name );
- name
- 要被銷毀的窗口的名字。
函數(shù)cvDestroyWindow 銷毀指定名字的窗口。
銷毀所有HighGUI窗口
void cvDestroyAllWindows(void);
函數(shù)cvDestroyAllWindows 銷毀所有已經(jīng)打開的HighGUI窗口。
設(shè)定窗口大小
void cvResizeWindow( const char* name, int width, int height );
- name
- 將被設(shè)置窗口的名字。
- width
- 新的窗口寬度。
- height
- 新的窗口高度。
函數(shù)cvResizeWindow 改變窗口的大小。
設(shè)定窗口的位置
void cvMoveWindow( const char* name, int x, int y );
- name
- 將被設(shè)置的窗口的名字。
- x
- 窗口左上角的x坐標。
- y
- 窗口左上角的y坐標。
函數(shù)cvMoveWindow 改變窗口的位置。
通過名字獲取窗口句柄
void* cvGetWindowHandle( const char* name );
- name
- 窗口名字。
函數(shù)cvGetWindowHandle 返回原始的窗口句柄(在Win32情況下返回HWND,GTK+情況下返回GtkWidget)
通過句柄獲取窗口的名字
const char* cvGetWindowName( void* window_handle );
- window_handle
- 窗口句柄。
給定函數(shù)cvGetWindowName 一個窗口的句柄(在Win32情況下是HWND,GTK+情況下是GtkWidget),
函數(shù)返回窗口的名字。
在指定窗口中顯示圖像
void cvShowImage( const char* name, const CvArr* image );
- name
- 窗口的名字。
- image
- 被顯示的圖像。
函數(shù)cvShowImage
在指定窗口中顯示圖像。
如果窗口創(chuàng)建的時候被設(shè)定標志CV_WINDOW_AUTOSIZE ,
那么圖像將以原始尺寸顯示;
否則,圖像將被伸縮以適合窗口大小。
創(chuàng)建trackbar并將它添加到指定的窗口。
CV_EXTERN_C_FUNCPTR( void (*CvTrackbarCallback)(int pos) );
int cvCreateTrackbar( const char* trackbar_name, const char* window_name,
int* value, int count, CvTrackbarCallback on_change );
- trackbar_name
- 被創(chuàng)建的trackbar名字。
- window_name
- 窗口名字,這個窗口將為被創(chuàng)建trackbar的父對象。
- value
- 整數(shù)指針,它的值將反映滑塊的位置。這個變量指定創(chuàng)建時的滑塊位置。
- count
- 滑塊位置的最大值。最小值一直是0。
- on_change
- 每次滑塊位置被改變的時候,被調(diào)用函數(shù)的指針。這個函數(shù)應(yīng)該被聲明為
void Foo(int);
如果沒有回調(diào)函數(shù),這個值可以設(shè)為NULL。
函數(shù)cvCreateTrackbar 用指定的名字和范圍來創(chuàng)建trackbar(滑塊或者范圍控制),
指定與trackbar位置同步的變量,
并且指定當(dāng)trackbar位置被改變的時候調(diào)用的回調(diào)函數(shù)。
被創(chuàng)建的trackbar顯示在指定窗口的頂端。
獲取trackbar的位置
int cvGetTrackbarPos( const char* trackbar_name, const char* window_name );
- trackbar_name
- trackbar的名字。
- window_name
- trackbar父窗口的名字。
函數(shù)cvGetTrackbarPos 返回指定trackbar的當(dāng)前位置。
設(shè)置trackbar位置
void cvSetTrackbarPos( const char* trackbar_name, const char* window_name, int pos );
- trackbar_name
- trackbar的名字。
- window_name
- trackbar父窗口的名字。
- pos
- 新的位置。
函數(shù)cvSetTrackbarPos 設(shè)置指定trackbar的位置。
設(shè)置鼠標事件的回調(diào)函數(shù)
#define CV_EVENT_MOUSEMOVE 0
#define CV_EVENT_LBUTTONDOWN 1
#define CV_EVENT_RBUTTONDOWN 2
#define CV_EVENT_MBUTTONDOWN 3
#define CV_EVENT_LBUTTONUP 4
#define CV_EVENT_RBUTTONUP 5
#define CV_EVENT_MBUTTONUP 6
#define CV_EVENT_LBUTTONDBLCLK 7
#define CV_EVENT_RBUTTONDBLCLK 8
#define CV_EVENT_MBUTTONDBLCLK 9
#define CV_EVENT_FLAG_LBUTTON 1
#define CV_EVENT_FLAG_RBUTTON 2
#define CV_EVENT_FLAG_MBUTTON 4
#define CV_EVENT_FLAG_CTRLKEY 8
#define CV_EVENT_FLAG_SHIFTKEY 16
#define CV_EVENT_FLAG_ALTKEY 32
CV_EXTERN_C_FUNCPTR( void (*CvMouseCallback )(int event, int x, int y, int flags, void* param) );
void cvSetMouseCallback( const char* window_name, CvMouseCallback on_mouse, void* param=NULL );
- window_name
- 窗口的名字。
- on_mouse
- 指定窗口里每次鼠標時間發(fā)生的時候,被調(diào)用的函數(shù)指針。
這個函數(shù)的原型應(yīng)該為
void Foo(int event, int x, int y, int flags, void* param);
其中event 是 CV_EVENT_* 變量之一,
x 和y 是鼠標指針在圖像坐標系的坐標(不是窗口坐標系),
flags 是CV_EVENT_FLAG 的組合,
param 是用戶定義的傳遞到cvSetMouseCallback 函數(shù)調(diào)用的參數(shù)。
- param
- 用戶定義的傳遞到回調(diào)函數(shù)的參數(shù)。
函數(shù)cvSetMouseCallback 設(shè)定指定窗口鼠標事件發(fā)生時的回調(diào)函數(shù)。
詳細使用方法,請參考opencv/samples/c/ffilldemo.c demo。
等待按鍵事件
int cvWaitKey( int delay=0 );
- delay
- 延遲的毫秒數(shù)。
函數(shù)cvWaitKey 無限制的等待按鍵事件(delay<=0時);
或者延遲"delay"毫秒。
返回值為被按鍵的值,如果超過指定時間則返回-1。
注釋:這個函數(shù)是HighGUI中唯一能夠獲取和操作事件的函數(shù),
所以在一般的事件處理中,它需要周期地被調(diào)用,
除非HighGUI被用在某些能夠處理事件的環(huán)境中。
從文件中讀取圖像
IplImage* cvLoadImage( const char* filename, int iscolor=1 );
- filename
- 要被讀入的文件的文件名。
- iscolor
- 指定讀入圖像的顏色:
如果 >0,讀入的圖像將被強制轉(zhuǎn)換為3通道彩色圖像;
如果為 0, 讀入的圖像將被強制轉(zhuǎn)換為灰度圖像;
如果 <0, 讀入的圖像將與它本來顏色信息一樣
(顏色通道數(shù)目由圖像文件決定)。
函數(shù)cvLoadImage 從指定文件讀入圖像,返回讀入圖像的指針。
目前支持如下文件格式:
- Windows位圖文件 - BMP, DIB;
- JPEG文件 - JPEG, JPG, JPE;
- 便攜式網(wǎng)絡(luò)圖片 - PNG;
- 便攜式圖像格式 - PBM,PGM,PPM;
- Sun rasters - SR,RAS;
- TIFF文件 - TIFF,TIF。
保存圖像到文件
int cvSaveImage( const char* filename, const CvArr* image );
- filename
- 文件名。
- image
- 要保存的圖像。
函數(shù)cvSaveImage 保存圖像到指定文件。
圖像格式的的選擇依賴于filename 的擴展名,
請參考cvLoadImage。
只有8位單通道或者3通道(通道順序為'BGR' )
可以使用這個函數(shù)保存。
如果格式,深度或者通道不符合要求,請先用cvCvtScale
和cvCvtColor 轉(zhuǎn)換;
或者使用通用的cvSave 保存圖像為XML或者YAML格式。
視頻獲取結(jié)構(gòu)
typedef struct CvCapture CvCapture;
結(jié)構(gòu)CvCapture
沒有公共接口,它只能被用來作為視頻獲取函數(shù)的一個參數(shù)。
初始化從文件中獲取視頻
CvCapture* cvCaptureFromFile( const char* filename );
- filename
- 視頻文件名。
函數(shù)cvCaptureFromFile 給指定文件中的視頻流分配和初始化CvCapture結(jié)構(gòu)。
當(dāng)分配的結(jié)構(gòu)不再使用的時候,它應(yīng)該使用cvReleaseCapture函數(shù)
釋放掉。
初始化從攝像頭中獲取視頻
CvCapture* cvCaptureFromCAM( int index );
- index
- 要使用的攝像頭索引。如果只有一個攝像頭或者用哪個攝像頭也無所謂,那使用參數(shù)-1應(yīng)該便可以。
函數(shù)cvCaptureFromCAM 給從攝像頭的視頻流分配和初始化CvCapture結(jié)構(gòu)。
目前在Windows下可使用兩種接口:Video for Windows(VFW)和Matrox Imaging Library(MIL);
Linux下也有兩種接口:V4L和FireWire(IEEE1394)。
釋放這個結(jié)構(gòu),使用函數(shù)cvReleaseCapture。
釋放CvCapture結(jié)構(gòu)
void cvReleaseCapture( CvCapture** capture );
- capture
- 視頻獲取結(jié)構(gòu)指針。
函數(shù)cvReleaseCapture 釋放由cvCaptureFromFile
或者cvCaptureFromCAM申請的CvCapture結(jié)構(gòu)。
從攝像頭或者視頻文件中抓取幀
int cvGrabFrame( CvCapture* capture );
- capture
- 視頻獲取結(jié)構(gòu)指針。
函數(shù)cvGrabFrame 從攝像頭或者文件中抓取幀。
被抓取的幀在內(nèi)部被存儲。
這個函數(shù)的目的是快速的抓取幀,
這一點對同時從幾個攝像頭讀取數(shù)據(jù)的同步是很重要的。
被抓取的幀可能是壓縮的格式(由攝像頭/驅(qū)動定義),所以沒有被公開出來。
如果要取回獲取的幀,請使用cvRetrieveFrame。
取回由函數(shù)cvGrabFrame抓取的圖像
IplImage* cvRetrieveFrame( CvCapture* capture );
- capture
- 視頻獲取結(jié)構(gòu)。
函數(shù)cvRetrieveFrame 返回由函數(shù)cvGrabFrame
抓取的圖像的指針。返回的圖像不可以被用戶釋放或者修改。
從攝像頭或者文件中抓取并返回一幀
IplImage* cvQueryFrame( CvCapture* capture );
- capture
- 視頻獲取結(jié)構(gòu)。
函數(shù)cvQueryFrame 從攝像頭或者文件中抓取一幀,然后解壓并返回這一幀。
這個函數(shù)僅僅是函數(shù)cvGrabFrame和
函數(shù)cvRetrieveFrame在一起調(diào)用的組合。
返回的圖像不可以被用戶釋放或者修改。
獲得視頻獲取結(jié)構(gòu)的屬性
double cvGetCaptureProperty( CvCapture* capture, int property_id );
- capture
- 視頻獲取結(jié)構(gòu)。
- property_id
- 屬性標識??梢允窍旅嬷唬?br>
CV_CAP_PROP_POS_MSEC - 影片目前位置,為毫秒數(shù)或者視頻獲取時間戳
CV_CAP_PROP_POS_FRAMES - 將被下一步解壓/獲取的幀索引,以0為起點
CV_CAP_PROP_POS_AVI_RATIO - 視頻文件的相對位置(0 - 影片的開始,1 - 影片的結(jié)尾)
CV_CAP_PROP_FRAME_WIDTH - 視頻流中的幀寬度
CV_CAP_PROP_FRAME_HEIGHT - 視頻流中的幀高度
CV_CAP_PROP_FPS - 幀率
CV_CAP_PROP_FOURCC - 表示codec的四個字符
CV_CAP_PROP_FRAME_COUNT - 視頻文件中幀的總數(shù)
函數(shù)cvGetCaptureProperty 獲得攝像頭或者視頻文件的指定屬性。
譯者注:有時候這個函數(shù)在cvQueryFrame被調(diào)用一次后,再調(diào)用cvGetCaptureProperty才會返回正確的數(shù)值。
設(shè)置視頻獲取屬性
int cvSetCaptureProperty( CvCapture* capture, int property_id, double value );
- capture
- 視頻獲取結(jié)構(gòu)。
- property_id
- 屬性標識符。可以是下面之一:
CV_CAP_PROP_POS_MSEC - 從文件開始的位置,單位為毫秒
CV_CAP_PROP_POS_FRAMES - 單位為幀數(shù)的位置(只對視頻文件有效)
CV_CAP_PROP_POS_AVI_RATIO - 視頻文件的相對位置(0 - 影片的開始,1 - 影片的結(jié)尾)
CV_CAP_PROP_FRAME_WIDTH - 視頻流的幀寬度(只對攝像頭有效)
CV_CAP_PROP_FRAME_HEIGHT - 視頻流的幀高度(只對攝像頭有效)
CV_CAP_PROP_FPS - 幀率(只對攝像頭有效)
CV_CAP_PROP_FOURCC - 表示codec的四個字符(只對攝像頭有效)
- value
- 屬性的值。
函數(shù)cvSetCaptureProperty 設(shè)置指定視頻獲取的屬性。
目前這個函數(shù)對視頻文件只支持:
CV_CAP_PROP_POS_MSEC, CV_CAP_PROP_POS_FRAMES, CV_CAP_PROP_POS_AVI_RATIO
創(chuàng)建視頻文件寫入器
typedef struct CvVideoWriter CvVideoWriter;
CvVideoWriter* cvCreateVideoWriter( const char* filename, int fourcc, double fps, CvSize frame_size, int is_color=1 );
- filename
- 輸出視頻文件名。
- fourcc
- 四個字符用來表示壓縮幀的codec
例如,
CV_FOURCC('P','I','M','1') 是MPEG-1 codec,
CV_FOURCC('M','J','P','G') 是motion-jpeg codec等。
在Win32下,如果傳入?yún)?shù)-1,可以從一個對話框中選擇壓縮方法和壓縮參數(shù)。
- fps
- 被創(chuàng)建視頻流的幀率。
- frame_size
- 視頻流的大小。
- is_color
- 如果非零,編碼器將希望得到彩色幀并進行編碼;
否則,是灰度幀(只有在Windows下支持這個標志)。
函數(shù)cvCreateVideoWriter 創(chuàng)建視頻寫入器結(jié)構(gòu)。
釋放視頻寫入器
void cvReleaseVideoWriter( CvVideoWriter** writer );
- writer
- 指向視頻寫入器的指針。
函數(shù)cvReleaseVideoWriter 結(jié)束視頻文件的寫入并且釋放這個結(jié)構(gòu)。
寫入一幀到一個視頻文件中
int cvWriteFrame( CvVideoWriter* writer, const IplImage* image );
- writer
- 視頻寫入器結(jié)構(gòu)。
- image
- 被寫入的幀。
函數(shù)cvWriteFrame 寫入/附加到視頻文件一幀。
初始化HighGUI
int cvInitSystem( int argc, char** argv );
- argc
- 命令行參數(shù)個數(shù)。
- argv
- 命令行參數(shù)數(shù)組。
函數(shù)cvInitSystem 初始化HighGUI。
如果在第一個窗口被創(chuàng)建前這個函數(shù)不能被用戶顯式地調(diào)用,
這個函數(shù)將以參數(shù)argc =0,argv =NULL隱式地被調(diào)用。
在Win32下,沒有必要顯式調(diào)用這個函數(shù)。
在X Window下,參數(shù)也許被用來自定義一個HighGUI窗口和控件的外觀。
Converts one image to another with optional vertical flip
void cvConvertImage( const CvArr* src, CvArr* dst, int flags=0 );
- src
- 輸入圖像。
- dst
- 目標圖像。必須為單通道或者3通道8位圖像。
- flags
- 操作標志:
CV_CVTIMG_FLIP - 垂直翻轉(zhuǎn)圖像。
CV_CVTIMG_SWAP_RB - 交換紅藍通道。
在OpenCV中,彩色圖像的通道順序是
BGR
然而在一些系統(tǒng)中,在顯式圖像之前通道順序應(yīng)該被翻轉(zhuǎn)為
(cvShowImage能夠自動轉(zhuǎn)換)。
函數(shù)cvConvertImage 轉(zhuǎn)換一幅圖像到另一幅圖像,如果需要的話可以垂直翻轉(zhuǎn)圖像。
這個函數(shù)被cvShowImage使用。
C
D
G
I
L
M
N
Q
R
S
W
|