首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 平面设计 > 图形图像 >

请求牛人帮助,使用cvSetCaptureProperty()后,从.avi文件中取不到图像,该怎么解决

2012-05-09 
请求牛人帮助,使用cvSetCaptureProperty()后,从.avi文件中取不到图像想通过一个循环,使用该帧在视频文件中

请求牛人帮助,使用cvSetCaptureProperty()后,从.avi文件中取不到图像
想通过一个循环,使用该帧在视频文件中的位置设置Capture,然后取出该帧。
问题是:1、在程序中使用
cvSetCaptureProperty( m_pCapture, CV_CAP_PROP_POS_AVI_RATIO, (double)in_nIndex/numFrames );时,通过单步跟踪发现,只有当i=0时能得到第一帧,后面得到的图像m_pImage都是空的。
2、使用cvSetCaptureProperty( m_pCapture, CV_CAP_PROP_POS_FRAMES, in_nIndex );时能得到图像,但是获取的图像和其帧数是不对应的,播放出来的视频是乱的。上网搜了一下,说 将OpenCV中, int ret = av_seek_frame(ic, video_stream, timestamp, 0);最后一个参数0改为 AVSEEK_FLAG_ANY ,即:
int ret = av_seek_frame(ic, video_stream, timestamp, AVSEEK_FLAG_ANY ); 然后重新编译就好了。但是我试了一下还是乱序的。
请明白的人给予指导,感激不尽!!!


void COriVideoDlg::GetFrame(void)
{
BOOL flag;
int i;
 
  int frameNum = (int) cvGetCaptureProperty(m_pCapture , CV_CAP_PROP_FRAME_COUNT);
for( i = 0;i <frameNum; i++)
{
flag = GetFrameByIndex(i) ;
if(!flag)
return;
if( !m_pImage )
return;

ShowImage( m_pImage, rtImageRegion); // 调用显示图片函数 
Sleep(70);
}
}


BOOL COriVideoDlg::GetFrameByIndex( int in_nIndex)
{
int numFrames = (int) cvGetCaptureProperty(m_pCapture, CV_CAP_PROP_FRAME_COUNT);
cvSetCaptureProperty( m_pCapture, CV_CAP_PROP_POS_AVI_RATIO, (double)in_nIndex/numFrames );
//cvSetCaptureProperty( m_pCapture, CV_CAP_PROP_POS_FRAMES, in_nIndex );
if( !cvGrabFrame( m_pCapture ) )
return false;
m_pImage = NULL;
m_pImage = cvRetrieveFrame( m_pCapture );

if(m_pImage == NULL)
return false;
else
return true;

}

[解决办法]
Up!
我也想知道cvSetCaptureProperty的具体用法。

热点排行