读取视频文件存盘(学习openCV课后题2.3)

// 第二章 课后练习题
// 题号:2.3
// 功能:读取avi文件中的数据,将是视频文件的尺寸缩小一倍
// 并将处理后的视频文件数据数据做存盘处理。

#include "cv.h"
#include "highgui.h"

/*******************************************************************/
/* 函数名 : doPyrDown() 执行图形的向下图像金字塔
/*   参数 : input       输入图像
/*          filter      cvPyrDown()的默认参数
/*   功能 : 将输入图像input缩小一倍,并返回指向经过缩小处理图像的指针
/*******************************************************************/
 
IplImage *doPyrDown(IplImage *input,int filter=CV_GAUSSIAN_5x5)
{
 //确保该图像的长度和宽度都能被2整除
 assert(input->width%2==0 && input->height%2==0);

 IplImage *output=cvCreateImage(cvSize(input->width/2,input->height/2),
         input->depth,
         input->nChannels);

 assert(output!=NULL);
 //对图像进行缩放处理
 cvPyrDown(input,output,CV_GAUSSIAN_5x5);

 return(output);

}

/**************************主函数**************************/

void main()
{
 //创建一个capture对象用以从视频文件中读取数据
 CvCapture *capture=cvCreateFileCapture("my.avi");
 assert(capture!=NULL);
 
 //用以从capture对象中获取图像帧
 IplImage *image=cvQueryFrame(capture);
 assert(image!=NULL);

 //从capture对象中获得视频的播放速度和图像的大小
 double fps=cvGetCaptureProperty(capture,CV_CAP_PROP_FPS);

 //(注:此处也可替换成image->width/2 和 image->height/2 做为参数)
 CvSize size=cvSize((int)(cvGetCaptureProperty(capture, CV_CAP_PROP_FRAME_WIDTH)/2),(int)(cvGetCaptureProperty(capture, CV_CAP_PROP_FRAME_HEIGHT))/2);

 //用以存放经过缩放处理后的图像
 IplImage *change_image;

 //创建一个视频写入对象
 CvVideoWriter *writer=cvCreateVideoWriter("convert.avi",-1,fps,size);

 
 while ((image=cvQueryFrame(capture))!=NULL)
 {
  //对图像进行缩放
  change_image=doPyrDown(image);

  //对图像进行垂直翻转
  cvConvertImage(change_image,change_image,CV_CVTIMG_FLIP);

  //将处理后的图像写入文件
  cvWriteFrame(writer,change_image);
 }

 //释放资源
 cvReleaseCapture(&capture);
 cvReleaseVideoWriter(&writer);


}

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值