OpenCV讀寫影片操作

一、讀取影片流

在使用OpenCV讀取攝影機,或者處理一些磁碟中保存的影片文件時,通常使用VideoCapture進行讀取。

std::string video_path("/path/to/the/video");
cv::VideoCapture VCap( video_path );
if( !VCap.isOpened() )
{
    CV_Error_(cv::Error::StsBadArg, ("Error opening video: %s", video_path.c_str()));
}

二、寫入影片流

而對於處理後的結果,想要編碼並保存到磁碟時,通常使用VideoWriter來操作。

int frame_fps = 24;
int Wd = 1920;
int Hd = 1080;
std::string video_out_name("/path/to/save/the/video");
cv::VideoWriter VOut;
VOut.open( video_out_name, cv::VideoWriter::fourcc('X','V','I','D'),
           frame_fps, cv::Size(Wd, Hd) );
if( !VOut.isOpened() )
{
    CV_Error_(cv::Error::StsBadArg, ("Error opening video: %s", video_out_name.c_str()));
}

cv::Mat res;
//...
VOut << res;

//...
VOut.release(); //在處理完成後用release釋放資源

三、寫入影片時的編碼格式

OpenCV VideoWriter一些常見的編碼格式以及對應的CV_FOURCC的寫法:

cv::VideoWriter::fourcc('P', 'I', 'M', '1') - MPEG-1
cv::VideoWriter::fourcc('M', 'J', 'P', 'G') - motion-jpeg
cv::VideoWriter::fourcc('M', 'P', '4', '2') - MPEG-4.2
cv::VideoWriter::fourcc('D', 'I', 'V', '3') - MPEG-4.3
cv::VideoWriter::fourcc('D', 'I', 'V', 'X') - MPEG-4
cv::VideoWriter::fourcc('U', '2', '6', '3') - H263
cv::VideoWriter::fourcc('I', '2', '6', '3') - H263I
cv::VideoWriter::fourcc('F', 'L', 'V', '1') - FLV1
cv::VideoWriter::fourcc('A', 'V', 'C', '1') - H264
cv::VideoWriter::fourcc('I', '4', '2', '0') - YUV

參考資料

[1] OpenCV – cv::VideoWriter::fourcc可支援的影片編碼格式 //www.stubbornhuang.com/2118/

本文作者 :phillee
發表日期 :2022年09月13日
本文鏈接//i.cnblogs.com/posts/edit;postId=16688729
版權聲明 :自由轉載-非商用-非衍生-保持署名(創意共享3.0許可協議/CC BY-NC-SA 3.0)。轉載請註明出處!
限於本人水平,如果文章和程式碼有表述不當之處,還請不吝賜教。