opencv進行視頻拍攝
opencv進行視頻拍攝
主要類:VideoCapture與VideoWriter
代碼:
double rate = 30.0;
Size videoSize(1280, 960);
VideoCapture capture(0); //(1)
capture.set(CAP_PROP_POS_AVI_RATIO, rate); //設置幀率
capture.set(CAP_PROP_FRAME_WIDTH, videoSize.width); //設置尺寸大小
capture.set(CAP_PROP_FRAME_HEIGHT, videoSize.height);
//VideoWriter writer("out.avi", CV_FOURCC('M', 'J', 'P', 'G'), rate, videoSize, false); //(2)
VideoWriter writer("out.avi", -1 , rate, videoSize, false); //(3)
Mat frame;
int frame_num = 0;
while (capture.isOpened() && frame_num <300 )
{
++frame_num;
capture >> frame;
cv::cvtColor(frame, frame, CV_BGR2GRAY);
writer << frame;
cv::imshow("video", frame);
if (cv::waitKey(1000/rate) > 0)
break;
}
//關閉視頻,手動調用析構函數
capture.release();
writer.release(); //(4)
注意:
(1) 該段程序為利用攝像機進行拍攝的代碼,如果讀取現有視頻,則將語句(1)進行修改,將參數0改為路徑名,如
VideoCapture capture("Demo.avi");
(2) 經常有拍攝完視頻無法播放的情況,問題主要有以下兩種情況:
a)用語句(2)設置VideoWriter時,第二個參數CV_FOURCC設置的是編碼格式,而電腦上可能并沒有所選的編碼格式,從而引起輸出視頻無法讀取;
解決方法:將語句(2)改為語句(3),語句(3)會自動彈出如下圖所示的對話框,可以在其中選擇編碼格式(這些是電腦上有的編碼格式);

b)缺少語句(4)或者由于某些原因沒有執行語句(4),同樣會導致輸出的視頻無法讀取;
(3) 語句(3)中最后一個參數為bool isColor(視頻幀圖像是否為彩色圖像),這個參數要與圖像對應,否則可能報錯。
posted on 2018-06-01 17:06 silentteen 閱讀(662) 評論(0) 收藏 舉報
浙公網安備 33010602011771號