{
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的标准控件没有这个功能。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)