opencv 讀寫視頻

opencv 讀寫視頻

OpenCV 2 中提供了兩個類來實現視頻的讀寫。讀視頻的類是 VideoCapture, 寫視頻的類是 VideoWriter。

一、讀視頻

VideoCapture 既可以從視頻文件讀取信息,也可以從計算機外接攝像頭讀取圖像信息。如果 VideoCapture 對象已經創建,也可以使用 VideoCapture::open() 打開,VideoCapture::open() 函數會自動調用 VideoCapture::release()函數,先釋放已經打開的視頻,然後再打開新視頻。

如果要讀一幀,可以使用 VideoCapture::read()函數。VideoCapture 類重載了>> 操作符,實現了讀視頻幀的功能。

二、寫視頻

與讀視頻不同的是,你需要在創建視頻時設置一系列參數,包括:文件名,編解碼器,幀率,寬度和高度等。編解碼器 使用四個字符表示,可以是 CV_FOURCC ‘M’,’J’,’P’,’G’)、CV_FOURCC(‘X’,’V’,’I’,’D’) 及 CV_FOURCC(‘D’,’I’,’V’,’X’)等。如果使用某種編解碼器無法創建視頻文件,請嘗試其他的編解碼器。

將圖像寫入視頻可以使用 VideoWriter::write() 函數,VideoWriter 類中也重載 了<< 操作符。

注:寫入的圖像尺寸必須與創建視頻時指定的尺寸一致。

C++代碼如下:

#include <iostream>
#include "opencv2/opencv.hpp"

//using namespace cv;

int main(int argc, char** argv){
    const int cam_width = 1280;//設置攝像頭尺寸,根據自己的攝像頭選擇
    const int cam_height = 720;

    cv::VideoCapture capture(0);
    capture.set(CV_CAP_PROP_FRAME_WIDTH, cam_width);
    capture.set(CV_CAP_PROP_FRAME_HEIGHT, cam_height);

    cv::VideoWriter writer("video.avi",  CV_FOURCC('M','J','P','G'), 25.0, cv::Size(1280, 720),1);
    //cv::VideoCapture cap("video.avi");


    if(!capture.isOpened()) {
        std::cerr << "Can not open a camera or file." << std::endl;
        return -1;
    }

    if(!writer.isOpened()) {
        std::cerr << "Can not create video file.\n" << std::endl;
        return -1;
    }

    cv::Mat frame;

    while(true){        
        capture>>frame;
        cv::imshow("video",frame);
        cv::waitKey(10);
        writer<<frame;

        if (cv::waitKey(10) == 27){
            break;
        }

    }

    return 0;
}


//g++ 2-video.cpp -o video `pkg-config --cflags --libs opencv`   編譯
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章