转载 https://yq.aliyun.com/articles/31089
在OpenCV中,保存视频一般分为三步骤:
1、初始化工作
//初始化保存视频文件
CvVideoWriter* video=NULL;
video=cvCreateVideoWriter("E:\\Sequence_mask\\out.avi",CV_FOURCC('X', 'V', 'I', 'D'),
m_inputfps,cvSize(m_inputwidth,m_inputheight),0);//1代表彩色视频,0代表黑白视频,即mask
if(video)
cout<<"VideoWriter has created."<<endl;
2、写入
//写入文件
cvWriteFrame(video,m_mask);//img m_bkimg m_mask
3、销毁
//释放video
cvReleaseVideoWriter(&video);
一般只需这三步骤,需要注意的是你所保存的视频是彩色视频还是黑白视频,这一点cvCreateVideoWriter的参数是不一致的!!!
转载 http://lib.csdn.net/article/opencv/32904
//实现对视频的读入,灰度化,保存视频的功能
#include <cv.h>
#include<highgui.h>
#include <iostream>
using namespace std;
int main()
{
char *video="test.avi";//视频文件,名字可以修改
CvCapture *cap=cvCaptureFromAVI(video);//从视频文件中读取
/*CvCapture *cap=cvCaptureFromCAM(0);*///从摄像头捕捉
IplImage *img=cvQueryFrame(cap);//读取一帧
if (!img)
{
cout<<"读取视频出错"<<endl;
exit(0);
}
//获取视频文件的参数
int frameHeight =(int) cvGetCaptureProperty(cap,CV_CAP_PROP_FRAME_HEIGHT);//帧高度
int frameWidth =(int) cvGetCaptureProperty(cap,CV_CAP_PROP_FRAME_WIDTH);//帧宽度
int fps =(int) cvGetCaptureProperty(cap,CV_CAP_PROP_FPS);//帧率
int numFrames =(int) cvGetCaptureProperty(cap,CV_CAP_PROP_FRAME_COUNT);//帧数
cout<<"视频图像的高度是"<<frameHeight<<" 宽度是"<<frameWidth<<endl;
cout<<"视频的帧率是"<<fps<<" 帧数是"<<numFrames<<endl;
//CvVideoWriter *writer=cvCreateVideoWriter("out.avi",CV_FOURCC('x','v','i','d'),fps,cvSize(frameWidth,frameHeight));//对于彩色视频文件
CvVideoWriter *writer=cvCreateVideoWriter("out.avi",-1,fps,cvSize(frameWidth,frameHeight),0);//对于灰度视频文件
IplImage *grayimg=cvCreateImage(cvSize(frameWidth,frameHeight),8,1);
while (img)
{
cvCvtColor(img,grayimg,CV_BGR2GRAY);
cvNamedWindow("灰度图",0);
cvShowImage("灰度图",grayimg);
cvWriteFrame(writer,grayimg);
if(cvWaitKey(20)==27)//等待20毫秒,按下Esc退出
break;;
img=cvQueryFrame(cap);
}
//注意不用释放img
cvReleaseImage(&grayimg);
cvReleaseCapture(&cap);
cvReleaseVideoWriter(&writer);
}