请问 directshow 中如何用ISampleGrabber做连续抓帧

yinfuyong 2009-05-05 02:20:17
directshow 中如何用ISampleGrabber做连续抓帧
我现在实现了抓一帧 然后处理之后显示 但不知道怎么做连续抓帧
...全文
300 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
comedate 2009-05-26
  • 打赏
  • 举报
回复

我也在做这方面。 zhangzhx3 是用DirectShow + openCV 做流媒体/图像处理的吧。呵呵

不过,是个新手。也在想连续抓帧的事。
zhangzhx3 2009-05-07
  • 打赏
  • 举报
回复
IplImage
这个是opencv中的处理,忘记说明了呃

当然,你可以直接用其他的.
yinfuyong 2009-05-07
  • 打赏
  • 举报
回复
感谢“兴星”兄
yinfuyong 2009-05-07
  • 打赏
  • 举报
回复
我试了下 IplImage有点问题 不知道怎么回事
我是用Visual Studio 2005编的
zhangzhx3 2009-05-06
  • 打赏
  • 举报
回复
就是在BufferCB里面添加你的图片保存函数
SaveIplImage(pBuffer, lBufferSize);

这个函数实现:
SaveIplImage(pBuffer, lBufferSize)
{
IplImage *m_temp[25];
IplImage ds_frame;
IplImage *frame =0;
int stride = (lWidth * sizeof( RGBTRIPLE ) + 3) & -4;
cvInitImageHeader( &ds_frame, cvSize(lWidth, lHeight), 8, 3,IPL_ORIGIN_TL, 4 ); //创建iplimage
ds_frame.widthStep = stride;
cvSetData( &ds_frame, pBuffer, stride ); //copy数据
frame = &ds_frame;
m_temp[iIdx]=cvCloneImage(frame);
iIdx++;//累加
if(iIdx==25)
{
flag=1;
iIdx=0;
bOneShot1 = FALSE;
}
return 0;
}

yinfuyong 2009-05-06
  • 打赏
  • 举报
回复
不好意思:m_pGrabber代表 CComPtr< ISampleGrabber > m_pGrabber;
yinfuyong 2009-05-06
  • 打赏
  • 举报
回复
HRESULT hr;
hr = m_pGrabber->SetBufferSamples( TRUE );
hr = m_pGrabber->SetOneShot( FALSE );
hr = m_pGrabber->SetCallback( &mCB, 1 );
回调函数是这个:
STDMETHODIMP BufferCB( double dblSampleTime, BYTE * pBuffer, long lBufferSize )
把回调函数封装在一个类CSampleGrabberCB里,定义CSampleGrabberCB mCB;


不知如何循环,多谢“兴星”兄
zhangzhx3 2009-05-06
  • 打赏
  • 举报
回复
貌似是设置SetOneShot(false);截图后继续运行graph,因此会一直有缓存进去.
具体的处理在回调函数里面进行.

你既然会抓一帧,来个循环就是连续抓图了.
yinfuyong 2009-05-06
  • 打赏
  • 举报
回复
各位大虾 帮帮忙啊 给个思路也行

19,468

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 图形处理/算法
社区管理员
  • 图形处理/算法社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧