概述
m_capture = 0;
m_writer = 0;
m_frame = 0;
m_capture = cvCaptureFromCAM(0/*m_CamIndex*/);
int count = 0;
m_frame = cvQueryFrame( m_capture );
while (m_frame==NULL)
{
m_frame = cvQueryFrame( m_capture );
count++;
}
m_writer=cvCreateVideoWriter(m_strVideoPathTemp,CV_FOURCC('X','V','I','D'),25.0,cvSize(m_frame->width,m_frame->height));
上面的代码的变量定义如下:
CvCapture * m_capture;
CvVideoWriter* m_writer;
IplImage* m_frame;
现在只是抓取了一帧图像,定义好了写指针但是并没有写到本地,要想将视频写入本地,有两种方法,一种用while循环,再用waitkey等待时间间隔,还可以使用定时器实现这个操作,主要用到的是三个函数:settimer、ontimer、killtimer,功能分别是设置一个定时器、定时器消息响应函数、终止定时器。
这里先设置一个定时器:
SetTimer(2,25,NULL);
接下来就需要在ontimer消息响应函数中添加代码:
void CxxView::OnTimer(UINT_PTR nIDEvent)
{
// TODO: Add your message handler code here and/or call default
switch (nIDEvent)
{
//case 1:
// getProbeRecord();
// UpdateData(FALSE);
// break;
case 2:
CMainFrame *pMain=(CMainFrame *)AfxGetApp()->m_pMainWnd;
m_hWndStatic = pMain->m_wndNativeView.m_wndDrawContent.m_widget_NativeViedo.GetSafeHwnd();
m_pWndStatic = FromHandle(m_hWndStatic);
if( !m_capture ) //打开视频流失败
{
AfxMessageBox("数据流载入失败");
KillTimer(2);
return ;
}
m_frame = cvQueryFrame( m_capture );
if (m_frame)
{
int frameH = (int) cvGetCaptureProperty(m_capture, CV_CAP_PROP_FRAME_HEIGHT);
int frameW = (int) cvGetCaptureProperty(m_capture, CV_CAP_PROP_FRAME_WIDTH);
cvWriteFrame(m_writer, m_frame);
m_pWndStatic->GetClientRect(&m_oRect);
videoFrameDisplay(m_frame,m_oRect,m_hWndStatic,m_pWndStatic->GetDC(),1);
}
break;
}
CView::OnTimer(nIDEvent);
}
最后
以上就是知性泥猴桃为你收集整理的opencv 读取摄像头并保存的全部内容,希望文章能够帮你解决opencv 读取摄像头并保存所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复