簡單圖形介面地址:http://fsa.ia.ac.cn/opencv-doc-cn/opencv-doc-cn-0.9.7/ref/opencvref_highgui.cn.htm
cvNamedWindow
建立視窗
int cvNamedWindow( const char* name, int flags );
-
name
-
視窗的名字,它被用來區分不同的視窗,並被顯示為視窗標題。
-
flags
-
視窗屬性標誌。目前唯一支援的標誌是
CV_WINDOW_AUTOSIZE。當這個標誌被設定後,如果使用者不能手動改變視窗大小,視窗大小會自動調整以適合被顯示映像(參考cvShowImage)。
函數cvNamedWindow建立一個可以放置映像和trackbar的視窗。被建立的視窗可以通過它們的名字被引用。
如果已經存在這個名字的視窗,這個函數將不做任何事情。
cvDestroyWindow
銷毀一個視窗
void cvDestroyWindow( const char* name );
-
name
-
要被銷毀的視窗的名字。
函數cvDestroyWindow銷毀指定名字的視窗。
cvDestroyAllWindows
銷毀所有HighGUI視窗
void cvDestroyAllWindows(void);
函數cvDestroyAllWindows銷毀所有已經開啟的HighGUI視窗。
cvResizeWindow
設定視窗大小
void cvResizeWindow( const char* name, int width, int height );
-
name
-
將被設定視窗的名字。
-
width
-
新的視窗寬度。
-
height
-
新的視窗高度。
函數cvResizeWindow改變視窗的大小。
cvMoveWindow
設定視窗的位置
void cvMoveWindow( const char* name, int x, int y );
-
name
-
將被設定的視窗的名字。
-
x
-
視窗左上方的x座標。
-
y
-
視窗左上方的y座標。
函數cvMoveWindow改變視窗的位置。
cvGetWindowHandle
通過名字擷取視窗控制代碼
void* cvGetWindowHandle( const char* name );
-
name
-
視窗名字。
函數cvGetWindowHandle返回原始的視窗控制代碼(在Win32情況下返回HWND,GTK+情況下返回GtkWidget)
cvGetWindowName
通過控制代碼擷取視窗的名字
const char* cvGetWindowName( void* window_handle );
-
window_handle
-
視窗控制代碼。
給定函數cvGetWindowName一個視窗的控制代碼(在Win32情況下是HWND,GTK+情況下是GtkWidget),函數返回視窗的名字。
cvShowImage
在指定視窗中顯示映像
void cvShowImage( const char* name, const CvArr* image );
-
name
-
視窗的名字。
-
image
-
被顯示的映像。
函數cvShowImage 在指定視窗中顯示映像。如果視窗建立的時候被設定標誌CV_WINDOW_AUTOSIZE,那麼映像將以原始大小顯示;否則,映像將被伸縮以適合視窗大小。
cvCreateTrackbar
建立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
-
被建立的trackbar名字。
-
window_name
-
視窗名字,這個視窗將為被建立trackbar的父物件。
-
value
-
整數指標,它的值將反映滑塊的位置。這個變數指定建立時的滑塊位置。
-
count
-
滑塊位置的最大值。最小值一直是0。
-
on_change
-
每次滑塊位置被改變的時候,被調用函數的指標。這個函數應該被聲明為
void Foo(int); 如果沒有回呼函數,這個值可以設為NULL。
函數cvCreateTrackbar用指定的名字和範圍來建立trackbar(滑塊或者範圍控制),指定與trackbar位置同步的變數,並且指定當trackbar位置被改變的時候調用的回呼函數。被建立的trackbar顯示在指定視窗的頂端。
cvGetTrackbarPos
擷取trackbar的位置
int cvGetTrackbarPos( const char* trackbar_name, const char* window_name );
-
trackbar_name
-
trackbar的名字。
-
window_name
-
trackbar父視窗的名字。
函數cvGetTrackbarPos返回指定trackbar的當前位置。
cvSetTrackbarPos
設定trackbar位置
void cvSetTrackbarPos( const char* trackbar_name, const char* window_name, int pos );
-
trackbar_name
-
trackbar的名字。
-
window_name
-
trackbar父視窗的名字。
-
pos
-
新的位置。
函數cvSetTrackbarPos設定指定trackbar的位置。
cvSetMouseCallback
設定滑鼠事件的回呼函數
#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 32CV_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
-
指定視窗裡每次滑鼠時間發生的時候,被調用的函數指標。這個函數的原型應該為
void Foo(int event, int x, int y, int flags, void* param);
其中event是 CV_EVENT_*變數之一, x和y是滑鼠指標在映像座標系的座標(不是視窗座標系), flags是CV_EVENT_FLAG的組合, param是使用者定義的傳遞到cvSetMouseCallback函數調用的參數。
-
param
-
使用者定義的傳遞到回呼函數的參數。
函數cvSetMouseCallback設定指定視窗滑鼠事件發生時的回呼函數。詳細使用方法,請參考opencv/samples/c/ffilldemo.c demo。
cvWaitKey
等待按鍵事件
int cvWaitKey( int delay=0 );
-
delay
-
延遲的毫秒數。
函數cvWaitKey無限制的等待按鍵事件(delay<=0時);或者延遲"delay"毫秒。傳回值為被按鍵的值,如果超過指定時間則返回-1。
注釋:這個函數是HighGUI中唯一能夠擷取和操作事件的函數,所以在一般的事件處理中,它需要周期地被調用,除非HighGUI被用在某些能夠處理事件的環境中。
讀取與儲存映像cvLoadImage
從檔案中讀取映像
IplImage* cvLoadImage( const char* filename, int iscolor=1 );
-
filename
-
要被讀入的檔案的檔案名稱。
-
iscolor
-
指定讀入映像的顏色:
如果 >0,讀入的映像將被強制轉換為3通道彩色映像;
如果為 0, 讀入的映像將被強制轉換為灰階映像;
如果 <0, 讀入的映像將與它本來顏色資訊一樣 (色彩通道數目由影像檔決定)。
函數cvLoadImage從指定檔案讀入映像,返回讀入映像的指標。目前支援如下檔案格式:
- Windows位元影像檔案 - BMP, DIB;
- JPEG檔案 - JPEG, JPG, JPE;
- 攜帶型網狀圖片 - PNG;
- 攜帶型映像格式 - PBM,PGM,PPM;
- Sun rasters - SR,RAS;
- TIFF檔案 - TIFF,TIF。
cvSaveImage
儲存映像到檔案
int cvSaveImage( const char* filename, const CvArr* image );
-
filename
-
檔案名稱。
-
image
-
要儲存的映像。
函數cvSaveImage儲存映像到指定檔案。映像格式的的選擇依賴於filename的副檔名,請參考cvLoadImage。只有8位單通道或者3通道(通道順序為'BGR' )可以使用這個函數儲存。如果格式,深度或者通道不符合要求,請先用cvCvtScale 和cvCvtColor轉換;或者使用通用的cvSave儲存映像為XML或者YAML格式。
視頻讀寫函數CvCapture
視頻擷取結構
typedef struct CvCapture CvCapture;
結構CvCapture 沒有公用介面,它只能被用來作為視頻擷取函數的一個參數。
cvCaptureFromFile
初始化從檔案中擷取視頻
CvCapture* cvCaptureFromFile( const char* filename );
-
filename
-
視頻檔案名稱。
函數cvCaptureFromFile給指定檔案中的視頻流分配和初始化CvCapture結構。
當分配的結構不再使用的時候,它應該使用cvReleaseCapture函數釋放掉。
cvCaptureFromCAM
初始化從網路攝影機中擷取視頻
CvCapture* cvCaptureFromCAM( int index );
-
index
-
要使用的網路攝影機索引。如果只有一個網路攝影機或者用哪個網路攝影機也無所謂,那使用參數-1應該便可以。
函數cvCaptureFromCAM給從網路攝影機的視頻流分配和初始化CvCapture結構。目前在Windows下可使用兩種介面:Video for Windows(VFW)和Matrox Imaging Library(MIL); Linux下也有兩種介面:V4L和FireWire(IEEE1394)。
釋放這個結構,使用函數cvReleaseCapture。
cvReleaseCapture
釋放CvCapture結構
void cvReleaseCapture( CvCapture** capture );
-
capture
-
視頻擷取結構指標。
函數cvReleaseCapture釋放由cvCaptureFromFile 或者cvCaptureFromCAM申請的CvCapture結構。
cvGrabFrame
從網路攝影機或者視頻檔案中抓取幀
int cvGrabFrame( CvCapture* capture );
-
capture
-
視頻擷取結構指標。
函數cvGrabFrame從網路攝影機或者檔案中抓取幀。被抓取的幀在內部被儲存。這個函數的目的是快速的抓取幀,這一點對同時從幾個網路攝影機讀取資料的同步是很重要的。被抓取的幀可能是壓縮的格式(由網路攝影機/驅動定義),所以沒有被公開出來。如果要取回擷取的幀,請使用cvRetrieveFrame。
cvRetrieveFrame
取回由函數cvGrabFrame抓取的映像
IplImage* cvRetrieveFrame( CvCapture* capture );
-
capture
-
視頻擷取結構。
函數cvRetrieveFrame返回由函數cvGrabFrame 抓取的映像的指標。返回的映像不可以被使用者釋放或者修改。
cvQueryFrame
從網路攝影機或者檔案中抓取並返回一幀
IplImage* cvQueryFrame( CvCapture* capture );
-
capture
-
視頻擷取結構。
函數cvQueryFrame從網路攝影機或者檔案中抓取一幀,然後解壓並返回這一幀。這個函數僅僅是函數cvGrabFrame和函數cvRetrieveFrame在一起調用的組合。返回的映像不可以被使用者釋放或者修改。
cvGetCaptureProperty
獲得視頻擷取結構的屬性
double cvGetCaptureProperty( CvCapture* capture, int property_id );
-
capture
-
視頻擷取結構。
-
property_id
-
屬性標識。可以是下面之一:
CV_CAP_PROP_POS_MSEC - 影片目前位置,為毫秒數或者視頻擷取時間戳記
CV_CAP_PROP_POS_FRAMES - 將被下一步解壓/擷取的幀索引,以0為起點
CV_CAP_PROP_POS_AVI_RATIO - 視頻檔案的相對位置(0 - 影片的開始,1 - 影片的結尾)
CV_CAP_PROP_FRAME_WIDTH - 視頻流中的幀寬度
CV_CAP_PROP_FRAME_HEIGHT - 視頻流中的幀高度
CV_CAP_PROP_FPS - 幀率
CV_CAP_PROP_FOURCC - 表示codec的四個字元
CV_CAP_PROP_FRAME_COUNT - 視頻檔案中幀的總數
函數cvGetCaptureProperty獲得網路攝影機或者視頻檔案的指定屬性。
譯者註:有時候這個函數在cvQueryFrame被調用一次後,再調用cvGetCaptureProperty才會返回正確的數值。
cvSetCaptureProperty
設定視頻擷取屬性
int cvSetCaptureProperty( CvCapture* capture, int property_id, double value );
-
capture
-
視頻擷取結構。
-
property_id
-
屬性標識符。可以是下面之一:
CV_CAP_PROP_POS_MSEC - 從檔案開始的位置,單位為毫秒
CV_CAP_PROP_POS_FRAMES - 單位為幀數的位置(只對視頻檔案有效)
CV_CAP_PROP_POS_AVI_RATIO - 視頻檔案的相對位置(0 - 影片的開始,1 - 影片的結尾)
CV_CAP_PROP_FRAME_WIDTH - 視頻流的幀寬度(只對網路攝影機有效)
CV_CAP_PROP_FRAME_HEIGHT - 視頻流的幀高度(只對網路攝影機有效)
CV_CAP_PROP_FPS - 幀率(只對網路攝影機有效)
CV_CAP_PROP_FOURCC - 表示codec的四個字元(只對網路攝影機有效)
-
value
-
屬性的值。
函數cvSetCaptureProperty設定指定視頻擷取的屬性。目前這個函數對視頻檔案只支援: CV_CAP_PROP_POS_MSEC, CV_CAP_PROP_POS_FRAMES, CV_CAP_PROP_POS_AVI_RATIO
cvCreateVideoWriter
建立視頻檔案寫入器
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下,如果傳入參數-1,可以從一個對話方塊中選擇壓縮方法和壓縮參數。
-
fps
-
被建立視頻流的幀率。
-
frame_size
-
視頻流的大小。
-
is_color
-
如果非零,編碼器將希望得到彩色幀並進行編碼;否則,是灰階幀(只有在Windows下支援這個標誌)。
函數cvCreateVideoWriter建立視頻寫入器結構。
cvReleaseVideoWriter
釋放視頻寫入器
void cvReleaseVideoWriter( CvVideoWriter** writer );
-
writer
-
指向視頻寫入器的指標。
函數cvReleaseVideoWriter結束視頻檔案的寫入並且釋放這個結構。
cvWriteFrame
寫入一幀到一個視頻檔案中
int cvWriteFrame( CvVideoWriter* writer, const IplImage* image );
-
writer
-
視頻寫入器結構。
-
image
-
被寫入的幀。
函數cvWriteFrame寫入/附加到視頻檔案一幀。
實用函數與系統函數cvInitSystem
初始化HighGUI
int cvInitSystem( int argc, char** argv );
-
argc
-
命令列參數個數。
-
argv
-
命令列參數數組。
函數cvInitSystem初始化HighGUI。如果在第一個視窗被建立前這個函數不能被使用者顯式地調用,這個函數將以參數argc=0,argv=NULL隱式地被調用。在Win32下,沒有必要顯式調用這個函數。在X Window下,參數也許被用來自訂一個HighGUI視窗和控制項的外觀。
cvConvertImage
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 - 垂直翻轉映像。
CV_CVTIMG_SWAP_RB - 交換紅藍通道。 在OpenCV中,彩色映像的通道順序是
BGR 然而在一些系統中,在顯式映像之前通道順序應該被翻轉為 (cvShowImage能夠自動轉換)。
函數cvConvertImage轉換一幅映像到另一幅映像,如果需要的話可以垂直翻轉映像。這個函數被cvShowImage使用。