溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

C++ 中如何使用VideoWriter寫入視頻

發(fā)布時間:2021-07-30 16:46:09 來源:億速云 閱讀:464 作者:Leah 欄目:大數據

C++ 中如何使用VideoWriter寫入視頻,很多新手對此不是很清楚,為了幫助大家解決這個難題,下面小編將為大家詳細講解,有這方面需求的人可以來學習下,希望你能有所收獲。

VideoWriter

類的創(chuàng)建

VideoWriter的對象的創(chuàng)建有兩種方式:

第一種是使用構造函數的形式:

cv::VideoWriter out(  

    const string& filename, // 輸入文件名  

    int fourcc, // 編碼形式,使用 CV_FOURCC()宏  

    double fps, // 輸出視頻幀率  

    cv::Size frame_size, // 單幀圖片的大小  

    bool is_color = true // 如果是false,可傳入灰度圖像   

);  

第二種使用open()的方式:

cv::VideoWriter out;  

out.open(  

    "my_video.mpg", //輸出文件名  

    CV_FOURCC('D','I','V','X'), // MPEG-4 編碼  

    30.0, // 幀率 (FPS)  

    cv::Size( 640, 480 ), // 單幀圖片分辨率為 640x480  

    true // 只輸入彩色圖  

); 

CV_FOURCC可以獲取的編碼格式

CV_FOURCC('P', 'I', 'M', '1') = MPEG-1 code

CV_FOURCC('M', 'J', 'P', 'G') = motion-jpeg codec
CV_FOURCC('M', 'P', '4', '2') = MPEG-4.2 codec
CV_FOURCC('D', 'I', 'V', '3') = MPEG-4.3 codec
CV_FOURCC('D', 'I', 'V', 'X') = MPEG-4 codec
CV_FOURCC('U', '2', '6', '3') = H263 codec
CV_FOURCC('I', '2', '6', '3') = H263I codec
CV_FOURCC('F', 'L', 'V', '1') = FLV1 codec
MPEG-1是為CD光盤介質定制的視頻和音頻壓縮格式;
Motion JPEG是一種視頻壓縮格式,其中每一幀圖像都分別使用JPEG編碼;
MPEG-4利用很窄的帶寬,通過幀重建技術,壓縮和傳輸數據,以求以最少的數據獲得最佳的圖像質量;


視頻寫入

VideoWriter對象寫入圖像

cv::VideoWriter::write(  

    const Mat& image // 寫入圖像作為下一幀  

);  

 

我們還有另一種方式,即“<<”操作

my_video_writer << my_frame; 

前面我們在VideoCapture中的Read讀視頻的操作也可以用”>>“操作

my_video_writer >> my_frame;


下面我們用到的素材,視頻素材還是我們上次已經開始用的《傾倒世界》,圖像素材用我們以前經常用的

C++ 中如何使用VideoWriter寫入視頻

目標

我們是把上面這個圖像寫入到我們播放的視頻里,比如在播放視頻的第15幀,第30幀,第50幀,第65幀,都寫入我們這個圖像,然后播放出來看看。

視頻效果

實現思路

  1. 加載我們的圖片為Mat圖像。

  2. 通過VideoCapture加載視頻獲取到視頻的FPS及寬和高

  3. 把我們的圖像縮放至上一步獲取到的寬和高大小

  4. 創(chuàng)建VideoWriter對象

  5. 播放VideoCapture加載的視頻,獲取到的每一幀都寫入到VideoWriter的對象里,當判斷到第15幀,第30幀,第50幀,第65幀時寫入我們的Mat加載的圖片;

  6. 釋放資源。

代碼編寫

新建一個項目opencv-1003,配置屬性(VS2017配置OpenCV通用屬性),然后在源文件寫入#include和main方法

C++ 中如何使用VideoWriter寫入視頻


1.加載我們的圖片為Mat圖像

C++ 中如何使用VideoWriter寫入視頻


2.通過VideoCapture加載視頻獲取到視頻的FPS及寬和高,并計算出兩幀相隔的時間

C++ 中如何使用VideoWriter寫入視頻


3.把我們的圖像縮放至上一步獲取到的寬和高大小

C++ 中如何使用VideoWriter寫入視頻


4.創(chuàng)建VideoWriter對象

C++ 中如何使用VideoWriter寫入視頻

上面我們創(chuàng)建的時候直接定義為E盤Family文件夾下的test.avi文件,視頻的格式為MJPG


5.播放VideoCapture加載的視頻,獲取到的每一幀都寫入到VideoWriter的對象里,當判斷到第15幀,第30幀,第50幀,第65幀時寫入我們的Mat加載的圖片;

C++ 中如何使用VideoWriter寫入視頻

C++ 中如何使用VideoWriter寫入視頻

C++ 中如何使用VideoWriter寫入視頻


6.釋放資源

C++ 中如何使用VideoWriter寫入視頻

看完上述內容是否對您有幫助呢?如果還想對相關知識有進一步的了解或閱讀更多相關文章,請關注億速云行業(yè)資訊頻道,感謝您對億速云的支持。

向AI問一下細節(jié)

免責聲明:本站發(fā)布的內容(圖片、視頻和文字)以原創(chuàng)、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI