捕获摄像头,使用PyrDown处理并保存视频

                                                                    实验名:使用opencv编程,捕获摄像头,使用PyrDown处理并保存视频

                                                                    功能:捕获摄像头,使用PyrDown处理并保存视频

                                                                    作者:Spark

                                                                    编译环境:opencv2.4.4及VS2008

                                                                    参考书:《学习opencv》及大牛们的文档等等

================================================================================================

直接上代码:

 

//功能:捕获摄像头,使用PyrDown处理并保存视频
//作者;Spark
//日期:13-12-23
#include "stdafx.h"
#include "opencv2/opencv.hpp"

//定义和声明doPyrDown函数
IplImage* doPyrDown(IplImage* in, int filter= CV_GAUSSIAN_5x5)//IPL_GAUSSIAN_5x5
{
     IplImage* out= cvCreateImage(  //此语句是使out和in的大小及类型一样
		                                             cvSize(in->width/2, in->height/2),
													 in->depth,
													 in->nChannels
													 );
	 cvPyrDown(in, out,CV_GAUSSIAN_5x5);
	 //返回out
	 return out;
};

//主函数main
int _tmain(int argc, _TCHAR* argv[])
{
	//创建两个窗口,一个是显示未处理前,一个事显示处理后的视频
	cvNamedWindow("src_video");
	cvNamedWindow("dst_video");

	//定义捕获摄像头的指针capture并初始化
	CvCapture* capture=0;
	capture= cvCreateCameraCapture(0);
	//检验capture是否捕获
	if(!capture)
	{
	      printf("Could not capture video!\n");
		  return -1;
	}

	IplImage* frame=0 ;  //定义frame,用于获取视频的每一帧
	//定义保存视频的属性
	//double fps= cvGetCaptureProperty(capture, CV_CAP_PROP_FPS);
	//CvSize size= cvSize((int) cvGetCaptureProperty(capture, CV_CAP_PROP_FRAME_WIDTH),  //宽
		                        //  (int) cvGetCaptureProperty(capture, CV_CAP_PROP_FRAME_HEIGHT)  //高
							 	//  );
	int fps= 25;
	int frameW= 640; 
	int frameH= 480;
	int isColor= 1;
	CvVideoWriter* writer =cvCreateVideoWriter(
		                                                             "aboutme.avi",
																	  CV_FOURCC('M', 'J', 'P', 'G'),
																	  fps,
	                                                                  cvSize(frameW, frameH),
																	  isColor
																	  );
	
	//while循环,cvPyrdown的处理,及显示并保存
	while(true)
	{
		//使用cvQueryFrame获取视频的每一帧
		frame= cvQueryFrame(capture);
		//检验frame是否为零,若frame=0,退出while循环
		if(!frame)
		{
			break;
		}

		//定义out_frame
	IplImage* out_frame= cvCreateImage(  //此语句是使out_frame和fram的大小及类型一样
		                                             cvSize(frame->width/2, frame->height/2),
													 frame->depth,
													 frame->nChannels
													 );

		//显示原视频
		cvShowImage("src_video", frame);

		//使用cvPyrDown处理视频
		out_frame= doPyrDown(frame);  
		//显示处理后视频
		cvShowImage("dst_video", out_frame);

		//保存处理后的视频
       cvWriteFrame(writer, frame);

		//wait
		char c= cvWaitKey(3);
        if(c==27)
		{
		   break;
		}
	}
	//释放内存及窗口
	cvReleaseVideoWriter( &writer);
	cvReleaseCapture( &capture);
	cvDestroyWindow( "src_video");
	cvDestroyWindow( "dst_video");

	return 0;
}
 

=====================================================================================

                                                                            总结

一:实验总体完成得还可以,只是我老把一些代码打错,打字速度慢

二:PyrDown处理还可以使用如下代码代替

cvPyrDown(frame, out_frame, CV_GAUSSIAN_5x5);   

出现的错误:

一:按照书上写视频保存的帧数及高宽时,

代码如下:

	//定义保存视频的属性
    double fps= cvGetCaptureProperty(capture, CV_CAP_PROP_FPS);
	CvSize size= cvSize((int) cvGetCaptureProperty(capture, CV_CAP_PROP_FRAME_WIDTH),  //宽
		                            (int) cvGetCaptureProperty(capture, CV_CAP_PROP_FRAME_HEIGHT)  //高
							 	     );
保存的视频只有0KB 疑问囧啊。

自从按照大牛们的方法【我转载了】,视频不再为0Kb了^_^。


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值