利用opencv类库在MFC显示摄像头视频并且保存摄像头视频

【原文】http://blog.csdn.net/watkinsong/article/details/7588505

依然是opencv老版的API

如果在前面那个项目的基础上添加保存摄像头信息,就可以简单的实现了,在原来项目的基础上调用cvCreateVideoWriter()函数创建一个写视频文件的指针,然后把每一帧的视频文件用cvWriteFrame(writer,m_Frame);这个函数实现就可以了。

[cpp]  view plain copy
  1. writer=cvCreateVideoWriter("MyVideo.avi",CV_FOURCC('x','v','I','D'),25,cvSize(640,480));  

上面函数中的参数大概就是创建视频文件的名字,视频压缩的格式,每秒钟的视频帧数,视频的大小。具体的参数设置请参考opencv开发文档。

关于opencv项目的配置,请参考opencv社区教程。本项目的所有配置,可以参考链接:http://blog.csdn.net/weixingstudio/article/details/7360941

两个主要的函数:

[cpp]  view plain copy
  1. CvCapture* capture;  
  2. CRect rect;  
  3. CDC *pDC;  
  4. HDC hDC;  
  5. CWnd *pwnd;  
[cpp]  view plain copy
  1. void CVideoMFCDlg::OnBnClickedButton1()  
  2. {  
  3.     // TODO: Add your control notification handler code here  
  4.     //AfxMessageBox("OK");  
  5.     if(!capture)  
  6.     {  
  7.         capture = cvCaptureFromCAM(0);  
  8.         //AfxMessageBox("OK");  
  9.     }  
  10.   
  11.     if (!capture)  
  12.     {  
  13.         AfxMessageBox("无法打开摄像头");  
  14.         return;  
  15.     }  
  16.     writer=cvCreateVideoWriter("MyVideo.avi",CV_FOURCC('x','v','I','D'),25,cvSize(640,480));  
  17.     // 测试  
  18.     IplImage* m_Frame;  
  19.     m_Frame=cvQueryFrame(capture);  
  20.     CvvImage m_CvvImage;  
  21.     m_CvvImage.CopyOf(m_Frame,1);     
  22.     if (true)  
  23.     {  
  24.         m_CvvImage.DrawToHDC(hDC, &rect);  
  25.         //cvWaitKey(10);  
  26.     }  
  27.   
  28.     // 设置计时器,每10ms触发一次事件  
  29.     SetTimer(1,10,NULL);  
  30. }  
[cpp]  view plain copy
  1. void CVideoMFCDlg::OnTimer(UINT_PTR nIDEvent)  
  2. {  
  3.     // TODO: Add your message handler code here and/or call default  
  4.     /************************************************************************/  
  5.     /* 显示摄像头                                                           */  
  6.     /************************************************************************/  
  7.     IplImage* m_Frame;  
  8.     m_Frame=cvQueryFrame(capture);  
  9.     CvvImage m_CvvImage;  
  10.     m_CvvImage.CopyOf(m_Frame,1);     
  11.     if (true)  
  12.     {  
  13.         m_CvvImage.DrawToHDC(hDC, &rect);  
  14.         cvWriteFrame(writer,m_Frame);  
  15.         //cvWaitKey(10);  
  16.     }  
  17.   
  18.     CDialogEx::OnTimer(nIDEvent);  
  19. }  

还是那句话,用新版的API方便得多,这种方式以后应该不会再用了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值