00 HighGUI視頻讀寫函數

Post date: 2012/4/10 上午 08:23:09

CvCapture

視頻獲取結構

typedef struct CvCapture CvCapture;

結構CvCapture 沒有公共介面,它只能被用來作為視頻獲取函數的一個參數。

cvCreateFileCapture

初始化從文件中獲取視頻

CvCapture* cvCreateFileCapture( const char* filename );

filename

視頻文件名。

函數cvCreateFileCapture給指定文件中的視頻流分配和初始化CvCapture結構。

當分配的結構不再使用的時候,它應該使用cvReleaseCapture函數釋放掉。

cvCreateCameraCapture

初始化從攝像頭中獲取視頻

CvCapture* cvCreateCameraCapture( int index );

index

要使用的攝像頭索引。如果只有一個攝像頭或者用哪個攝像頭也無所謂,那使用參數-1應該便可以。

函數cvCreateCameraCapture給從攝像頭的視頻流分配和初始化CvCapture結構。目前在Windows下可使用兩種介面:Video for Windows(VFW)和Matrox Imaging Library(MIL); Linux下也有兩種介面:V4L和FireWire(IEEE1394)。

釋放這個結構,使用函數cvReleaseCapture。

cvReleaseCapture

釋放CvCapture結構

void cvReleaseCapture( CvCapture** capture );

capture

視頻獲取結構指針。

函數cvReleaseCapture釋放由函數cvCreateFileCapture或者cvCreateCameraCapture分配的CvCapture結構。

註:若從capture中使用cvQueryFrame獲取圖像指針,在releaseCapture的時候同時函數釋放圖像指針,用戶不用再自己釋放。

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在一起調用的組合。返回的圖像不可以被用戶釋放或者修改。 抓取後,capture被指向下一幀,可用cvSetCaptureProperty調整capture到合適的幀。

註意: cvQueryFrame返回的指針總是指向同一塊記憶體。建議cvQueryFrame後拷貝一份。而且返回的幀需要FLIP後才符合OPENCV的坐標系。 若返回值為NULL,說明到了視頻的最後一幀。

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才會返回正確的數值。這是一個bug,建議在調用此函數前先調用cvQueryFrame。

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寫入/附加到視頻文件一幀。

返回:

成功返回1,不成功返回0。