制作视频功能
在下面的 Demo 中呢,主要是使用了以下的几个特殊点的 API ,包括 cvCreateVideoWriter 和 cvWriteFrame
CvVideoWriter* cvCreateVideoWriter( const char* filename,
int fourcc,
double fps,
CvSize frame_size,
int is_color=1 );
这个函数的作用就是初始化一个视频文件写入器,其中的参数的话,
filename 不用多说,自然是指将要创建的视频文件的名称,
fourcc 则代表的是视频压缩的编码格式,
CV_FOURCC('P','I','M','1') 是 MPEG-1 codec,
CV_FOURCC('M','J','P','G') 是motion-jpeg codec等。
在 Win32 下,如果传入参数 -1,可以从一个对话框中选择压缩方法和压缩参数。
fps 则代表的是帧率。
is_color 则代表是希望得到彩色帧还是得到灰度帧。
int cvWriteFrame( CvVideoWriter* writer, const IplImage* image );
这个 API 的作用是非常明显的,即写一个帧到视频文件中,至于参数的话我想也不需要多做解释了。
#include "stdafx.h"
#include"cv.h"
#include"highgui.h"
#include"stdio.h"
int main(int argc, char** argv)
{
cvNamedWindow("vedio");
CvCapture* capture = 0;
// 首先是要通过摄像设备来得到一个CvCapture对象
if(1 == argc)
{ // 从摄像头获取初始化对象CvCapture
capture = cvCreateCameraCapture(0);
}
else
{ // 从视频文件中获取初始化对象CvCapture
capture = cvCreateCameraCapture(atoi(argv[1]));
}
// 如果没有获取到有效的CvCapture对象,则返回 -1 终止程序运行
if(!capture)
{
return -1;
}
IplImage* frame;
//指定视频中每一帧的大小(我的摄像头拍摄下的图片均是160*120的)
CvSize size = cvSize(160,120);
//需要初始化一个写视频文件的对象,这里注意使用的编解码器格式是MJPG 帧率设置为5
CvVideoWriter* videoWriter =
cvCreateVideoWriter("test.avi",CV_FOURCC('M','J','P','G'),5,size);
char keyCode;
//每隔30ms,从摄像头中取出一帧
while((keyCode = cvWaitKey(30)))
{
if(keyCode == 27)
{
break;
}
//得到从摄像头中获取的帧
frame = cvQueryFrame(capture);
//将帧写入视频文件中
cvWriteFrame(videoWriter,frame);
cvShowImage("vedio",frame);
}
cvReleaseVideoWriter(&videoWriter);
cvReleaseImage(&frame);
cvDestroyWindow("video");
return 0;
}
F5执行结果:
录制好的视频可以播放, 这里就不上传截图了。
本文参考:http://www.cnblogs.com/BoyXiao/archive/2010/10/27/1862928.html