1. 前言
本程序基于Visual Studio2013+Windows 7x64 +OpenCV3.1的环境,实现调用电脑USB摄像头,并保存视频文件到本地的功能。
程序实现
//VideoCapture.cpp
#include<opencv2\opencv.hpp>
using namespace cv;
int main(){
VideoCapture capture(0);
// 设置摄像头的拍摄属性为 分辨率640x480,帧率30fps
capture.set(CAP_PROP_FRAME_HEIGHT, 480);
capture.set(CAP_PROP_FRAME_WIDTH, 640);
capture.set(CAP_PROP_FPS, 30.0);
// 设置保存视频的格式为AVI,编码为MJPG
VideoWriter writer("test.avi", VideoWriter::fourcc('M', 'J', 'P', 'G'), 30.0, Size(640, 480), true);
Mat videoPlay;
// 通过总帧数来控制拍摄时间,如果是10s的段视频的话,循环300次
int count(300);
namedWindow("VideoPlay", WINDOW_NORMAL);
while (count--){
capture >> videoPlay;
writer << videoPlay;
imshow("VideoPlay", videoPlay);
waitKey(1000 / 30);
}
// 释放相关对象
writer.release();
capture.release();
destroyWindow("VideoPlay");
return 0;
}
2. 运行结果
3. 几种可能会影响拍摄的情况
- 尽管程序中设定了拍摄的帧率为30fps,但是摄像头的帧率很大程度上受硬件状况和实时环境的限制。比如电压,插电源的笔记本比用电池的笔记本帧率更高更稳定;再比如光照,太暗的环境往往也达不到30fps;
- debug模式下,由于VS要加入很多调试信息,因此摄像头的帧率可能会有所下降。 waitKey的等待时间可以适当降低,略低于1000/30 ms的间隔最好,太高也会影响视频帧率。