MFC 如何读取视频文件(如.avi)

MFC 如何读取视频文件(如.avi),第1张

void Cs1View::OnVideoFileRead()

{

IplImage* pFrame = NULL  

//获取视频文件  

CvCapture *pCapture=cvCreateFileCapture("calib_3D.avi")  

//cvNamedWindow("video",1)  

//显示视屏 

int i=0

while(1)  

{  

pFrame=cvQueryFrame( pCapture )

i++

CString str

str.Format(TEXT("%d"),i) 

if(!pFrame)

break

else

{

AfxMessageBox(str)

i=i+2

}

img1.CopyOf(pFrame)

Invalidate()

///* char c=cvWaitKey(33)  

//if(c==27)break */

//cvReleaseCapture(&pCapture)

//img1.Destroy()

}  

}

程序是不给了,既然路过,就给个提示吧。可以分以下几步实现代码:

第一,了解视频格式,知道怎么样从文件中把一帧帧视频数据读取出来。比如可以读取文件头信息,根据头信息来确认所需的各个参数。如果是没规范的视频裸数据,就根据事由定义的分辩率和YUV格式来确认如果读取帧数据,比如是320*240,YUV422,那一帧的数据是320*240*2,每隔这么多数据,就是一帧了。

第二,使用转换公式把YUV转换成RGB。具体代码百度一下即有。

第三,会使用directdraw,不会的话先百度一下学会使用。搞视频显示的,都要使用这个低层的画图库。效率高

第四,开一个40MS的定时器(因为帧率为25Hz,所以每40MS显示画一帧)。每隔40MS *** 作一次:从文件中准确读取出一帧YUV图像数据,把YUV视频数据转换成RGB图像数据,使用directdraw把RGB图像数据画到窗口。一直循环,把文件中数据全部显示完毕。

(把问题这样区分后,各个百度一下,基本可以得到代码,这个是搞开发的基本技能)

注:路人是搞视频监控产品开发的,本来是想百度一下有什么润侯汤,不小心看到这个问题,就助人为乐一下。以上回答信不信由你,满不满意由你,不用给分的!

MFC里没有这样的控件,要实现预览可以通过两种方式,一种是VFW(比较简单,功能稍微简单点),一种是DirectShow(稍微复杂,但功能强大)。两种实现方法都是一样的:调用各自的视频预览接口,然后把mfc的某个窗口句柄传进去(CWnd,CStatic,CDialog都可以),就可以在窗体上实时看到视频图像,保存图片的方法是通过获取预览流数据然后自己写文件。

总之MFC的标准控件没有这个功能。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/tougao/11684521.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-17
下一篇 2023-05-17

发表评论

登录后才能评论

评论列表(0条)

保存