天天看點

《OpenCV圖像處理》——1.6 讀取和寫入視訊檔案

本節書摘來自華章計算機《opencv圖像處理》一書中的第1章,第1.6節,作者:[西]葛羅瑞亞·布埃諾·加西亞(gloria bueno garcía)著,更多章節内容可以通路雲栖社群“華章計算機”公衆号檢視

視訊處理的是運動圖像,而不是靜止圖像。視訊資源可以是一個專用錄影機、網絡攝像頭、視訊檔案或圖像檔案序列。在opencv中,videocapture類和videowriter類為視訊進行中所涉及的捕獲和記錄任務提供了一個易用的c++ api。

1.?recvideo示例代碼

recvideo示例是一個簡短的代碼片段,使您可以了解如何使用一個預設錄影機作為一個捕捉裝置,來抓取幀,對它們進行邊緣檢測,并且将新的轉換視訊幀作為一個檔案儲存。而且,建立兩個視窗同時顯示原始幀和處理過的幀。該示例的代碼為:

《OpenCV圖像處理》——1.6 讀取和寫入視訊檔案
《OpenCV圖像處理》——1.6 讀取和寫入視訊檔案

在本示例中,應該快速浏覽一下如下這些函數:

double videocapture::get(int propid):這個函數為一個videocapture對象傳回指定的屬性值。在videoio.hpp頭檔案中包含了基于dc1394(ieee 1394數位相機規範)屬性的一個完整清單。

static int videowriter::fourcc(char c1, char c2, char c3, char c4):這個函數把四個字元連接配接起來形成一個fourcc碼。在示例中,msvc代表微軟視訊(僅在windows上可用)。

bool videowriter::isopened():如果寫入視訊的對象被成功初始化,這個函數傳回true。例如,使用一個不正确的編解碼器會産生一個錯誤。

注意,在一個系統中有效的fourcc碼依賴于本地安裝的編解碼器。

videocapture& videocapture::operator>>(mat& image):這個函數抓取、解碼并傳回下一幀。這個方法和布爾函數videocapture::read(outputarray image)等價。可以使用這個函數而不使用函數videocapture::grab(),然後使用videocapture::retrieve()。

videowriter& videowriter::operator<<(const mat& image):這個函數寫入下一幀。這個方法和布爾函數videowriter::write(const mat& image)等價。

在本示例中,有一個讀取/寫入循環,可同時地擷取并處理視窗事件。waitkey(1000/fps)函數調用負責執行這個任務。在這個示例中,1000/fps表示傳回外部循環之前等待的毫秒數。盡管不精确,但對于錄制的視訊仍能擷取每秒幀數的一個近似度量。

void videocapture::release():這個函數釋放視訊檔案或采集裝置。盡管在本示例中沒有必要顯式地包含,但為了說明它的使用,示例中仍包含了這個

函數。

繼續閱讀