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` 編譯