关于AVI视频分解成bmp图像解决办法

关于AVI视频分解成bmp图像
     怎么开头好呢,首先我要感谢我导师无情的逼我,然后再感谢我实习的湖南省交科院给我提供了如此好的实习环境,还有......想不起来了。
     现在言归正传,我老板(就是我导师)接了一个交通方面视频检测的项目,那天叫我过去说“小孙啊,这个项目还得靠你们,你们要好好干”(言外之意就是让我们给他打不要钱的工,嗨!)。我是知道她的阴谋的不过没办法随让我是她的弟子呢我只能应诺说“好,我一定好好的干”。“那好你回去把怎么把视频分解成图像先搞定”。这句话犹如晴天霹雳啊,我眼前全是金星撒,这东西我没搞过啊。没办法那也得硬着头皮搞。这不就有了下面的结果。
      其实AVI视频分解成bmp图像说白了很容易的,只要在AVI视频文件中首先将VIDEO视频流读取出来让后逐帧保存出来就偶了。其中当然要用到很多名字一长串的函数和关键字了。比如:AVIFILEINFO 这是一个结构体它定义了一个avi文件最基本的东西比如帧图像的宽和高,一个avi文件中包括几个文件流等等。AviFileInfo()函数则是生成指定avi文件的这个结构体了;还有AVISTREAMINFO它也是一个结构体,它里面定义了帧图像的宽和高,还有一副图像文件所用的字节数,还有一个avi文件中一共有多少帧的图像得到它的函数是AVIStreamInfo,还有AVIFileGetStream()函数它是用来从以装入内存的avi文件读出我的视频流。还有AVIFStreamFrame()函数则是从以得到的视频流中,取出一帧图像的数据。当然这个只是数据没有其他的。
      至于图像保存我就不用说了吧,什么图像文件头,图像信息头等等大家都是高手了我也就不用献丑了




      好了现在开始分解图像,如果大家不愿意搞基础知识,而直接就像搞定结果没关系就不用看上面的了(呵呵)但是还有两点要说:第一就是你的程序里面必须要包含vfw.h头文件在你的lib库中必须要偶vfw32.lib库才可,第二点就是这个程序啊只能分解没有用任何压缩算法压缩过的avi文件,如果你的avi视频时压缩过的,那你就得先想想办法把它解压了再说吧。好了废话少说。
     
     其实对于你而言你要多的事情很简单,首先打开 你的VC++6.0然后建立一个MFC的应用程序项目,在项目类型中我们就直接选择基本对话框就可以了不要太麻烦的其他选择默认就ok了,让后将对话框资源打开(我就偷懒了就搞一个按钮就可以其他没必要你说是不嘿嘿)里面搞一个按钮建立一个利用Class Wizard建立一个消息响应他的函数
     然后再消息里面输入如下代码就ok了(该死不能粘贴复制)


CFileDialog FileDlg(TRUE,NULL,NULL,OFN_HIDEREADONLY|OFN_OVERWRITEPROMP,_T("视频文件(*.avi)|*.avi|"));
//CFilDialog是一个对话框类用来建立一个对话对象
CString avifile;
if(FileDlg,DoMoDal()==IDOK)//这个函数是创建这个对话框对象的
{
    avifile=FileDlg.GetPathName();


}

    




------解决方案--------------------
引用:
avi格式繁多,因此bmp合成avi好弄,倒过来就很麻烦(通用性)


如果是windows的话,dshow编程在Video render前插入自己的grabber filter来存档不就ok了。完全不用管压缩格式,只需要你的PC有相应解码器就行了。