读书人

OpenCV视频播放控制时 跳帧+花屏的有关

发布时间: 2012-02-19 19:43:37 作者: rapoo

OpenCV视频播放控制时 跳帧+花屏的问题
1.代码运行后,有跳帧现象,进度条与时间同步移动,但是在整个视频播放的过程中只显示了几帧图像
2.在网上搜索后,被告知是 cvSetCpatureProperty有问题,需修改ffmpeg.cpp中的标志,修改完重新编译后,发现视频进度条同步移动,但是花屏了
求解~~代码如下:[code=C/C++][/code]
int g_position=0;
CvCapture* capture=NULL;
void Foo(int pos) //回调函数
{
cvSetCaptureProperty(capture,CV_CAP_PROP_POS_FRAMES,pos); // 视频获取结构,单位为帧数的位置(属性),属性的值
}
int main(int c,char** v)
{
cvNamedWindow("ex",CV_WINDOW_AUTOSIZE); int i=0;
/*cvResizeWindow("ex",1024,1024);*/
capture=cvCreateFileCapture("e:\\dsp\\walk.avi"); //初始化从文件中获取视频
int frames=(int)cvGetCaptureProperty(capture,CV_CAP_PROP_FRAME_COUNT);//获取最大帧数属性
/*printf("\n%d\n",frames);*/
if(frames!=0)
{
cvCreateTrackbar("POSITION","ex",&g_position,frames,Foo);//trackbar名字,窗口,滑块创建时位置,滑块位置最大值,回调函数
}
IplImage *frame;int trapos=cvGetCaptureProperty(capture,CV_CAP_PROP_POS_FRAMES);
while(1)
{
frame=cvQueryFrame(capture); //从摄像头或文件抓取一帧并返回
/*if(!frame)break;*/
int trapos=cvGetCaptureProperty(capture,CV_CAP_PROP_POS_FRAMES);
cvSetTrackbarPos("POSITION","ex",trapos);
cvShowImage("ex",frame);
char c=cvWaitKey(33);
if(c==27)break;
}
cvReleaseCapture(&capture);
cvDestroyWindow("ex");
}


[解决办法]
版本?
2没看明白,什么问题?
一个例子,仅供参考

C/C++ code
void CTestOpenCVDlg::OnBnClickedButton6(){    //初始化一个视频文件捕捉器    CvCapture* capture = cvCaptureFromAVI("C:\\SAMPLE.AVI");//C:\\SAMPLE.AVI    if (capture==NULL)    {        AfxMessageBox(L"读取视频文件错误");        return;    }    //获取视频信息    cvQueryFrame(capture);    int frameH    = (int) cvGetCaptureProperty(capture, CV_CAP_PROP_FRAME_HEIGHT);    int frameW    = (int) cvGetCaptureProperty(capture, CV_CAP_PROP_FRAME_WIDTH);    int fps       = (int) cvGetCaptureProperty(capture, CV_CAP_PROP_FPS);    int numFrames = (int) cvGetCaptureProperty(capture, CV_CAP_PROP_FRAME_COUNT);    //定义和初始化变量    IplImage* img = 0;    //读取和显示    CDC *pDC = GetDC();//    HDC hDC = pDC->GetSafeHdc();    CvvImage cimg;    CRect rect;    GetClientRect(&rect);    while(TRUE)     {        img = cvQueryFrame(capture); //获取一帧图片        if (img==NULL)        {            Invalidate();            break;        }        cimg.CopyOf(img);        cimg.DrawToHDC(hDC,&rect);        Sleep(1000/fps);    }    ReleaseDC(pDC);    cvReleaseCapture(&capture);} 

读书人网 >VC/MFC

热点推荐