`
coolerbaosi
  • 浏览: 727197 次
文章分类
社区版块
存档分类
最新评论

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

 
阅读更多

关于摄像头的控制操作,无非就是获取摄像头图像并且保存摄像头视频等常用的操作。

关于在MFC项目中利用opencv捕获摄像头信息,在下面这篇文章中写的很详细:

http://blog.csdn.net/weixingstudio/article/details/7360941

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

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

两个主要的函数:

CvCapture* capture;
CRect rect;
CDC *pDC;
HDC hDC;
CWnd *pwnd;


void CVideoMFCDlg::OnBnClickedButton1()
{
	// TODO: Add your control notification handler code here
	//AfxMessageBox("OK");
	if(!capture)
	{
		capture = cvCaptureFromCAM(0);
		//AfxMessageBox("OK");
	}

	if (!capture)
	{
		AfxMessageBox("无法打开摄像头");
		return;
	}
	writer=cvCreateVideoWriter("MyVideo.avi",CV_FOURCC('x','v','I','D'),25,cvSize(640,480));
	// 测试
	IplImage* m_Frame;
	m_Frame=cvQueryFrame(capture);
	CvvImage m_CvvImage;
	m_CvvImage.CopyOf(m_Frame,1);	
	if (true)
	{
		m_CvvImage.DrawToHDC(hDC, &rect);
		//cvWaitKey(10);
	}

	// 设置计时器,每10ms触发一次事件
	SetTimer(1,10,NULL);
}


void CVideoMFCDlg::OnTimer(UINT_PTR nIDEvent)
{
	// TODO: Add your message handler code here and/or call default
	/************************************************************************/
	/* 显示摄像头                                                           */
	/************************************************************************/
	IplImage* m_Frame;
	m_Frame=cvQueryFrame(capture);
	CvvImage m_CvvImage;
	m_CvvImage.CopyOf(m_Frame,1);	
	if (true)
	{
		m_CvvImage.DrawToHDC(hDC, &rect);
		cvWriteFrame(writer,m_Frame);
		//cvWaitKey(10);
	}

	CDialogEx::OnTimer(nIDEvent);
}


关于整个显示摄像头并且保存摄像头信息的工程源码,可以从下面链接下载:

http://download.csdn.net/detail/weixingstudio/4284066

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics