【opencv學習筆記】一. 網路攝像頭視訊儲存
阿新 • • 發佈:2019-02-18
目標:將網路攝像頭的視訊流儲存在電腦中
#include <opencv2/core/core.hpp> #include <opencv2/highgui/highgui.hpp> #include <iostream> using namespace cv; using namespace std; int main(int, char**) { VideoCapture cam; Mat frame; //儲存網路視訊流地址 const string videoStreamAddress = "http://xxx.xxx.xxx.xxx/xxxx.mjpg"; //視訊地址根據個人情況改變 //檢測該視訊流是否能被開啟,若失敗直接退出程式 if (!cam.open(videoStreamAddress)) { cout << "échec à connecter IPcaméra" << endl; getchar(); return -1; } //獲取一幀用於提取影象大小 cam >> frame; //建立視訊儲存檔案 VideoWriter video((const string)"v1.avi", CV_FOURCC('D', 'I', 'V', 'X'), cam.get(CV_CAP_PROP_FPS), Size(frame.cols, frame.rows)); //檢測檔案建立是否成功 if (video.isOpened()) cout << "création du fichier réussie" << endl; //儲存視訊檔案,我們想錄一段約2分鐘的視訊,而視訊速度為25FPS,因此記錄3000幀 for (int i = 0;i<3000;) { //檢測下一幀是否為空,為空不儲存影象 if (!cam.read(frame)) { cout << "aucun frame" << endl; waitKey(); } else{ video.write(frame); imshow("Output Window", frame); waitKey(1); i++; } } cam.release(); return 0; }
測試結果視訊儲存正常可以順利播放,除了程式實際執行時間約為計算出的2分鐘(3000 幀 /25 fps /60 秒/分 = 2分鐘)的兩倍長,我將提取幀數改為200嘗試發現程式執行時間依然為八秒的兩倍左右,而且儲存的視訊以25fps播放起來的時候速度明顯偏快,猜測可能是從視訊流裡面獲取的幀率資訊與實際幀率有誤差。