利用OpenCV根据帧序列图生成帧率25的视频

一、问题的提出

     做运动分析检测,需要有一定的素材视频,但是素材视频的编码OpenCV不能识别,无法对指定的视频做实验,怎么素材视频通用化使得OpenCV能正常识别?

二、解决的方法

     (1)素材视频总是有配套的播放器来播放,那么使用这个播放器查看总帧数,和总播放时长,计算出帧率为25,表示一秒钟播放25帧图像。

     (2)用这个配套的播放器对素材视频进行逐帧步进抓图,这个操作很辛苦,一秒钟25帧,那么抓25帧是一秒,素材视频30秒就要抓750帧,很辛苦。

     (3)帧抓完后,发现一帧图1.4M,以位图格式保存,那么30秒就要达到1G的存储空间,怎么办?没办法,不知道怎么去获取解码器和安装解码器,就只能这么忍受。察看到逐帧步进抓图的存储是按序列编排文件名,那么要修改好使得每个文件名都是以规则“文件名”+“帧序列”的形式存在。

    (4)编写根据帧序列图生成帧率25的视频的代码

三、问题的解决:

    (1)解决一个字符串合并的问题:       

         由于字符串参数有个赋值格式化设置函数叫做Format,要实现多类型参数的字符串化,可以参照如下示例:
         float f = 0.0;
         char sz[128];
         int n = 1;

         CString str;
         str.Format("%f%s%d",f,sz,n);

     (2)采用MJPG的编码格式依次将这些图像序列写入到视频中保存起来,采用MJPG的编码格式是因为操作系统自带了Media player播放器,这种编码格式属于无压缩的,Media player可以识别播放。

     (3)实现方式是使用MFC对话框窗体的按钮事件来进行视频的逐帧写图,由于帧数多,那么在写入器循环做写这个动作的时候,整个程序是假死在那里直到写入器的写入操作终结。

     (4)我把代码放在如下位置,仅仅包含按钮事件的代码。

 http://download.csdn.net/detail/huanghanyu11/4327499

posted on 2012-05-24 20:42  黄玮璘  阅读(3041)  评论(0编辑  收藏  举报

导航