OpenCV 录制视频

制作视频功能

在下面的 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

 


 

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值