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(视频帧图像是否为彩色图像),这个参数要与图像对应,否则可能报错。