第三节 写入AVI视频文件

         参考资料:《学习OpenCV》中文版P30—33    ,参考网站:计算机视觉小菜鸟的专栏 http://blog.csdn.net/carson2005/article/details/6705758 

环境 :windows7+ VS2010 +OpenCV2.4.4  . 

        说明:1、 在win7下从摄像头获取的图像帧,在写入avi视频的时候会出现问题;从视频文件读取视频帧,则能够顺利进行;

                     2、cvCaptureFromFile的使用方法:OpenCV中cvCaptureFromFile()用于从.avi文件中读取视频,并返回CvCapture结构指针。 用法如下:

   CvCapture*  capture= 0  ;

     if( !(capture= cvCaptureFromFile("avi文件路径")

      {        

       cout<<"Error";

         exit(-1);

      }

      IplImage*  pFrame = cvQueryFrame(capture)); // 函数cvQueryFrame从摄像头或者文件中抓取一帧,然后解压并返回这一帧。这个函数仅仅是函数cvGrabFrame和函数cvRetrieveFrame在一起调用的组合。返回的图像不可以被用户释放或者修改。至于pFrame中存放的图像帧是否是动态更新的,不太清楚,期待大牛指导啊!

      对帧进行处理

      cvReleaseCapture(&cap);//释放视频流

  

     

代码如下:


#include "stdafx.h"
#include"highgui.h"
#include"cv.h"
#include<iostream>
using namespace  std;


int _tmain(int argc, _TCHAR* argv[])
{
CvCapture* capture = 0;
cvNamedWindow("pic");

//capture = cvCreateCameraCapture(-1);   // 从摄像头读取视频,在win7下不能成功,原因因为win7操作系统去除了wfm
capture = cvCaptureFromFile("E:\\ test.avi");    //从文件读取视频

if(!capture)
{
cout<<"Erroer"<<endl;
system("pause");
exit(-1);
}
 
IplImage*  temImg = cvQueryFrame(capture);    //temImg 存储捕获的帧   ,根据视频流


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)
);


CvVideoWriter* writer = cvCreateVideoWriter(  //创建一个写设备
"E:\\love.avi",                            //注意,此处的转义字符
CV_FOURCC('X','V','I','D'),
fps,
size
);
IplImage*  log_frame = cvCreateImage(           
size,
IPL_DEPTH_8U,
3
);


while(( temImg == cvQueryFrame(capture)) != NULL)

cvCopy(temImg,log_frame);
        cvWriteFrame(writer,log_frame);     //逐帧写入


if(!log_frame) break;
cvShowImage("pic",log_frame);  //显示视频
char  c = cvWaitKey(33);
if(c==27) break;               //用户按esc键退出


}


cvReleaseVideoWriter(&writer);
cvReleaseCapture(&capture);
cvDestroyWindow("pic");
system("pause");
return 0;
}




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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值