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没看明白,什么问题?
一个例子,仅供参考
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);}