Opencv播放视频的问题
2007-08-29 19:16
417 查看
bool ImageViewer::ShowImage()
...{
double fps, start, end;
int count;
uchar *data;
IplImage *pImage = NULL;
CvCapture *pCapture = NULL;
if((pCapture = cvCaptureFromAVI("Alizee.avi")) == NULL)...{
cout << "Open video file failed! ";
return false;
}
while((pImage = cvQueryFrame(pCapture)) != NULL)...{
start = (double)cvGetTickCount();
fps = cvGetCaptureProperty(pCapture, CV_CAP_PROP_FPS);
image = IplImageToQImage(pImage, &data);
update();
if(cvWaitKey(1) >= 0)
break;
free(data);
end = (double)cvGetTickCount();
count = (int)(1000000/fps-(end-start)/((double)(cvGetTickFrequency())));
if(count < 0)
count = 0;
usleep(count);
}
cvReleaseImage(&pImage);
cvReleaseCapture(&pCapture);
return true;
}
首先,cvGetCaptureProperty()对摄像头的操作无效,开始我也以为它对视频文件的操作也一样无效,结果是先用 cvQueryFrame()获取一帧后,再使用该函数才能获得视频文件的各种属性(帧的高度,宽度,总帧数,帧率等),本以为获得了视频文件的帧率,就可以解决视频播放速度快的问题,结果新的问题也产生了。
上述程序11~24行完成的是:从视频文件抓取一帧,然后把IplImage*类型的图像转成QImage*类型的图像,完成之后update(),执行一个paintEvent()事件,将转为QImage*的图像显示到Qt界面中。以下假定得到的视频帧率是25fps,这样的话就要保证循环的间隔时间是40ms,因此算出12~19行的执行时间time,然后usleep(40ms-time)时间,那么循环的时间间隔就是40ms了(20~22行的时间忽略不计)。试验的结果是播放速度没有以前那么快了,但是和正常速度相比还是不匹配。结果发现是usleep()延迟的时间不准,和参数值相差5~6ms,那么每8帧就会和正常速度错开一帧,1s内就会错开约3帧,结果因为usleep()延时不准带来了播放速度的变慢。
不知道有什么比较好的解决办法?(Opencv擅长图像处理,而对于视频播放的控制还不完善)
相关文章推荐
- 解决python opencv无法播放视频的问题
- OpenCV Trackbar 实现播放视频代码遇到的问题 cvQueryFrame cvCreateFileCapture cvCreateTrackbar cvSetTrackbarPos
- OpenCV Trackbar 控制视频播放 cvSetTrackbarPos 的问题
- opencv播放不了AVI视频的问题
- 解决FLV视频文件在IIS6.0上无法播放的问题
- opencv视频获取显示代码问题和调试
- Qt源码重新编译QtMultimedia模块解决XP播放视频问题
- opencv_study第三篇|视频播放控制
- QT 框架中快速应用OpenCV 基于视频播放
- 视频在苹果ios浏览器微信内置浏览器中无法播放问题
- 关于Unity3D VideoPlayer播放视频中的声音的问题
- android 播放视频常见问题
- opencv播放AVI视频(2)
- OpenCV教程【002 VideoCapture加载并播放视频】
- 视频录制与播放(竖屏)旋转90度问题
- WebView加载h5页面播放音乐或视频 返回,按锁屏键,按home键 播放不停止问题
- 【FFmpeg】ffplay播放rtsp视频流花屏问题
- Opencv实现视频播放与进度控制
- opencv读取avi视频解码问题
- python3.5 + opencv3.2 + pyinstaller,cv2.VideoCapture(fileName)无法读取视频的问题