您的位置:首页 > 其它

采集视频并写入文件

2016-07-08 12:46 288 查看
#include <cv.h>
#include <cxcore.h>
#include <highgui.h>

int main(int argc, char** argv)
{
CvCapture* capture1 = cvCreateCameraCapture(0);//初始化从摄像头中获取视频
cvNamedWindow("video");//创建一个窗口对象

IplImage *tempImg = cvQueryFrame(capture1);//创建一个临时img
double fps = 20;
CvSize size = cvSize((int)cvGetCaptureProperty(capture1, CV_CAP_PROP_FRAME_WIDTH),
(int)cvGetCaptureProperty(capture1, CV_CAP_PROP_FRAME_HEIGHT));//获取窗口的大小
//写入文件参数:目标文件,编码格式,帧率,大小
CvVideoWriter *Writer = cvCreateVideoWriter("D:\\test.avi", CV_FOURCC('M', 'J', 'P', 'G'), fps, size);
//使用MJPG格式编码
//IplImage * out = cvCreateImage(size, IPL_DEPTH_8U, 3);//创建一个多通道的图片,传入size保证与窗口的大小一致
while (1)
{
tempImg = cvQueryFrame(capture1);//获得当前帧
if (!tempImg)//如果读取不到帧,便退出循环
break;
//cvCopy(tempImg, out);//将临时帧拷贝到要写入的帧里面。 参数:(源,目标)
cvWriteFrame(Writer, tempImg);//将读取的帧写入视屏文件
cvShowImage("video", tempImg);//显示出来当前帧

char c = cvWaitKey(33);
if (c == 27)
break;
if (c == 97) // 如果按a,则保存下当前帧
cvSaveImage("D:\\test.jpg", tempImg);

}
cvReleaseVideoWriter(&Writer);
//	cvReleaseImage(&out);
cvReleaseCapture(&capture1);
cvDestroyWindow("video");
}

cvGetCaptureProperty常用参数:

CV_CAP_PROP_POS_MSEC - 影片目前位置,为毫秒数或者视频获取时间戳

CV_CAP_PROP_POS_FRAMES - 将被下一步解压/获取的帧索引,以0为起点

CV_CAP_PROP_POS_AVI_RATIO - 视频文件的相对位置(0 - 影片的开始,1 - 影片的结尾)

CV_CAP_PROP_FRAME_WIDTH - 视频流中的帧宽度

CV_CAP_PROP_FRAME_HEIGHT - 视频流中的帧高度

CV_CAP_PROP_FPS - 帧率

CV_CAP_PROP_FOURCC - 表示codec的四个字符

CV_CAP_PROP_FRAME_COUNT - 视频文件中帧的总数
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: