- 1、本文档共4页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
OpenCV下按视频帧率(FPS)播放视频
OpenCV下按视频帧率(FPS)播放视频
杨青锦
(大连 116023)
摘 要:本文阐述了如何在OpenCV下按视频帧率(FPS)播放视频。程序使用了Windows系统下的高精度计时器控制视频播放的帧间隔时间。本文给出了高精度计时器的使用方法、实现时间控制功能的主要程序片段,并在文章的最后比较了高精度计时器与一般计时函数的精度。
关键词:OpenCV, 帧率,高精度计时器,播放视频
How to play video at its original fps in OpenCV
Yang Qingjin
(Dalian 116023)
【Abstract】This article depicts how to play video at its original fps in OpenCV. The program uses high-resolution timer of Windows system to play video at a certain frame interval. This article demonstrates the usage of high-resolution timer and the code segment implementing time control. In the end, this article compares the resolution between high-resolution timer and common timer function.
【Key words】OpenCV, fps, high-resolution timer, play video
OpenCV是Intel公司资助的开源计算机视觉库。它提供了几百个C/C++函数,实现了计算机视觉领域中大部分最常用的算法。使用OpenCV开发计算机视觉应用程序,经常要读取从摄像机获得的视频流或视频文件,获得其中的每一帧,再对该帧进行算法处理。如果要满足程序交互性的需要,通常还要将算法处理过的帧按原视频帧率(FPS, frame per second)显示出来。OpenCV提供了视频帧的读取、显示函数以及获得视频帧率属性的函数,而按帧率决定的帧时间间隔显示帧,则需要自己编程来解决。
在程序中,首先要取得视频的帧率属性,并由此计算出帧间隔时间,代码如下:
CvCapture * pCapture = cvCreateFileCapture(“Filename.avi“);
double dFPS = cvGetCaptureProperty(pCapture, CV_CAP_PROP_FPS);
DWORD dwFrameInterval = (DWORD) (1000 / dFPS); //帧间隔时间,以毫秒为单位
CvCapture* cvCreateFileCapture( const char* filename )的参数是要读取的文件名,函数返回指向CvCapture结构体的指针,该指针的作用类似于我们用fopen()函数打开文件,返回的指向FILE结构体的指针,之后我们可以通过这个指针操作视频文件。如果程序是从摄像机读取视频,则用cvCreateCameraCapture()代替该函数。
double cvGetCaptureProperty( CvCapture* capture, int property_id )的作用是得到视频的属性信息,参数CV_CAP_PROP_FPS要求函数返回帧率。用1000除以帧率,就得到了以毫秒为单位的帧间隔时间。
通常一个处理视频的OpenCV程序主循环如下所示:
for(;;) //处理视频的循环
{
//读取帧
pFrame = cvQueryFrame(pCapture);
//视频结束,退出循环体
if(!pFrame)break;
//对每帧进行算法处理
……
……
//显示帧
cvShowImage(Video, pFrame);
//延时40毫秒
cvWaitKey(40);
}
IplImage* cvQueryFrame( CvCapture* capture )的功能是顺序读取视频的一帧,如果视频结束,则返回的指针为NULL。程序接下来将对帧进行算法处理。在处理结束后,cvShowImage()将帧显示在名为Video的窗口中。cvWaitKey(40)的作用是延时40毫秒。假如我们对每一帧不做任何算法处理,那么该循环体的功能,就是将该视频以40毫秒的帧间隔(即25 fps)播放出来。然而在实际应用中,算法处理部分总会占用不定量的时间,所以延时固定时长的做法是不成立的。要使循环体的执行时间,即每一帧
您可能关注的文档
最近下载
- 风力发电机模拟软件:FAST二次开发_(3).FAST模拟器架构解析.docx VIP
- 语文三年级下册专项训练:阅读.doc VIP
- 金属制品项目企业经营战略方案.docx
- 人工智能导论课件 第十三章 类脑智能.pptx VIP
- 招聘面试题大全.doc VIP
- 北师大版小学数学六年级下册各单元思维导图.pdf
- 中考物理常考估测汇总及估测训练100题(模拟50题+真题50题)(原卷版).docx VIP
- 岩壁梁悬臂模板施工方案.docx VIP
- 碳纤维片材加固混凝土结构技术规程(2007年版) CECS146:2003.pdf VIP
- 新人教版(2025)小学三年级英语下册第六单元Unit 6 单元整体教学设计.docx VIP
文档评论(0)