关于摄像头的控制操作,无非就是获取摄像头图像并且保存摄像头视频等常用的操作。
关于在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);
}
关于整个显示摄像头并且保存摄像头信息的工程源码,可以从下面链接下载: