您好,登錄后才能下訂單哦!
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('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;
下面我們用到的素材,視頻素材還是我們上次已經開始用的《傾倒世界》,圖像素材用我們以前經常用的
目標
我們是把上面這個圖像寫入到我們播放的視頻里,比如在播放視頻的第15幀,第30幀,第50幀,第65幀,都寫入我們這個圖像,然后播放出來看看。
視頻效果
實現思路
加載我們的圖片為Mat圖像。
通過VideoCapture加載視頻獲取到視頻的FPS及寬和高
把我們的圖像縮放至上一步獲取到的寬和高大小
創(chuàng)建VideoWriter對象
播放VideoCapture加載的視頻,獲取到的每一幀都寫入到VideoWriter的對象里,當判斷到第15幀,第30幀,第50幀,第65幀時寫入我們的Mat加載的圖片;
釋放資源。
代碼編寫
新建一個項目opencv-1003,配置屬性(VS2017配置OpenCV通用屬性),然后在源文件寫入#include和main方法
1.加載我們的圖片為Mat圖像
2.通過VideoCapture加載視頻獲取到視頻的FPS及寬和高,并計算出兩幀相隔的時間
3.把我們的圖像縮放至上一步獲取到的寬和高大小
4.創(chuàng)建VideoWriter對象
上面我們創(chuàng)建的時候直接定義為E盤Family文件夾下的test.avi文件,視頻的格式為MJPG
5.播放VideoCapture加載的視頻,獲取到的每一幀都寫入到VideoWriter的對象里,當判斷到第15幀,第30幀,第50幀,第65幀時寫入我們的Mat加載的圖片;
6.釋放資源
看完上述內容是否對您有幫助呢?如果還想對相關知識有進一步的了解或閱讀更多相關文章,請關注億速云行業(yè)資訊頻道,感謝您對億速云的支持。
免責聲明:本站發(fā)布的內容(圖片、視頻和文字)以原創(chuàng)、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。