opencv讀取視頻檔案並顯示的程式詳細解釋

來源:互聯網
上載者:User

int main( int argc, char** argv )
{
    //========================================================
    // CvCapture 是一個結構體,用來儲存映像捕獲所需要的資訊。
    // opencv提供兩種方式從外部捕獲映像,一種是從網路攝影機中,一種
    // 是通過解碼視頻得到映像。兩種方式都必須從第一幀開始一幀一幀
    // 的按順序擷取,因此每擷取一幀後都要儲存相應的狀態和參數。
    // 比如從視頻檔案中擷取,需要儲存視頻檔案的檔案名稱,相應的******
    // 類型,下一次如果要擷取將需要解碼哪一幀等。 這些資訊都儲存在
    // CvCapture結構中,每擷取一幀後,這些資訊都將被更新,擷取下一幀
    // 需要將新資訊傳給擷取的api介面
    //=======================================================
    CvCapture* capture = 0;
    //===========================================================
    // IplImage 是結構體類型,用來儲存一幀映像的資訊,也就是一幀
    // 映像的所有像素值構成的一個矩陣
    //===========================================================
    IplImage *frame, *frame_copy = 0;
    
     // 建立一個視窗,用“result”作為視窗的標識符
     cvNamedWindow( "result", 1 );
    
     // ==========================================
     // 初始化一個視頻捕獲操作。
     // 告訴底層的捕獲api我想從 Capture1.avi中捕獲圖片,
     // 底層api將檢測並選擇相應的******並做好準備工作
     //==============================================
   capture = cvCaptureFromFile("c://Capture1.avi")

    // 如果 初始化失敗,那麼capture為空白指標,程式停止,
    // 否則進入捕獲迴圈
    if( capture )
    {
        // 捕獲迴圈
        for(;;)
        {
            // 調用cvGrabFrame,讓底層api解碼一幀映像
            // 如果解碼失敗,就退出迴圈
            // 如果成功,解碼的映像儲存在底層api的緩衝中
            if( !cvGrabFrame( capture ))
                break;
           
            // 將解碼得到映像資訊從緩衝中轉換成IplImage格式放在frame中
            frame = cvRetrieveFrame( capture );

            // 如果擷取緩衝或轉換失敗,則退出迴圈
            if( !frame )
                break;

            // 將frame中的映像資訊在視窗result中顯示
   cvShowImage( "result", frame );

   // 暫停一會兒,讓你看一像
   Sleep(66.9);
           
            // 如果你敲了鍵盤,就退出程式,否則繼續捕獲下一幀
            if( cvWaitKey( 10 ) >= 0 )
                break;
        }

        // 退出程式之前要清理一下堆棧中的記憶體,免得記憶體泄露
        //cvReleaseImage( &frame );注意不需要這句,因為frame是從視頻中捕獲的,沒有單獨分配記憶體,無需釋放,當capture 釋放的時候frame自然就釋放了。
        
        // 退出之前結束底層api的捕獲操作,免得它們佔著茅坑不拉屎
        // 比如會使得別的程式無法訪問已經被它們開啟的檔案
        cvReleaseCapture( &capture );
   
}
    cvDestroyWindow("result");

    return 0;
}

夠清楚了吧,good luck

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.