OpenCV簡介與安裝
801
2025-04-01
第二個程序:視頻
用OpenCV播放視頻就像顯示圖像一樣簡單。唯一不同的是,我們需要某種循環來讀取視頻序列中的每一幀。我們也許還需要一些方法在電影太無聊的時候來幫助跳出循環。
示例2-3:一個簡單的播放視頻文件的OpenCV程序
#include "opencv2/highgui/highgui.hpp" #include "opencv2/imgproc/imgproc.hpp" int main( int argc, char** argv ) {
cv::namedWindow( "Example3", cv::WINDOW_AUTOSIZE );?? cv::VideoCapture cap;
cap.open( string(argv[1]) );
cv::Mat frame;?? for(;;) {
cap >> frame;???? if( frame.empty() ) break;???????????? // Ran out of film???? cv::imshow( "Example3", frame );???? if( cv::waitKey(33) >= 0 ) break;
}
return 0;
}
main函數從創建一個窗口開始(在本例中窗口名為"Example3"),視頻讀取結構 cv::VideoCapture在其后被加載進來。這個結構可以打開和關閉很多類型的ffmpeg支持的視頻文件。
cap.open(string(argv[1])); cv::Mat frame;
視頻讀取結構通過傳入字符串打開文件,這個字符串指示了想要打開的視頻文件的路徑。一旦視頻被打開,視頻讀取結構將會包含所有的關于這個視頻文件可以讀取的屬性,包括狀態信息。以這樣的方式創建以后,cv::VideoCapture結構將會在視頻的開頭被初始化。在這個程序中,cv::Mat frame聲明了一個可以保存視頻幀的結構。
cap >> frame;
if( frame.empty() ) break;
cv::imshow( "Example3", frame );
一旦內部的while()循環開始執行,視頻文件會按照幀從視頻流中被讀取。這個程序通過if(frame.empty())檢查數據是不是真的從視頻中讀了出來,如果沒有,程序將會退出。如果視頻幀被成功讀取,將通過cv::imshow()顯示。
if( cv::waitKey(33) >= 0 ) break;
一旦顯示了這幀圖片,我們會等待33毫秒。注4如果用戶在這段時間在鍵盤有任何輸入,我們將退出循環。如果沒有發生,33毫秒之后我們會跳過并執行下一個循環。在退出的時候,所有數據的內存空間將會由于生命周期的結束被自動釋放掉。
視頻 OpenCV
版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。
版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。