首页 > 其他 > 详细

使用OPENCV播放AVI视频

时间:2014-01-16 21:50:52      阅读:390      评论:0      收藏:0      [点我收藏+]

本次讲解如何使用OPENCV播放AVI视频,不过在写程序之前得告诉大家一声,OPENCV只支持AVI格式的视频播放。

首先,源代码基本格式:

#include<highgui.h>
int main(int argc,char** argv)
{
 cvNamedWindow("Michael",CV_WINDOW_AUTOSIZE);
 CvCapture* capture=cvCreateFileCapture(argv[1]);
 IplImage* frame;
 while(1)
 {
  frame=cvQueryFrame(capture);
  if(!frame) break;
  cvShowImage("Example2",frame);
  char c=cvWaitKey(30);
  if(c==27) break;
 }
 cvReleaseCapture(&capture);
 cvDestroyWindow("Example2");
}

下面在一一解释代码意思:

本次代码中有些函数与上篇中的一样(意思与功能),所以不再废话。

CvCapture* capture=cvCreateFileCapture(argv[1]);

函数cvCreateFileCapture()通过参数设置确定要读入的AVI文件,返回一个指向CvCapture结构的指针,这个结构包含要读入的AVI文件的所有信息,其中包含状态信息。

  frame=cvQueryFrame(capture);

一旦进入while(1)循环,我们便开始读入AVI文件, cvQueryFrame()的参数为Capture结构的指针,用来将下一帧视频文件载入内存。返回一个对应当前帧的指针,与cvLoadImage不同的是cvLoadImage为图像分配内存空间,而cvQueryFrame()使用已经在cvCapture结构中分配好的内存,所以,当结构CvCapture被释放后,每一帧图像所对应的内存空间即会被释放。

 char c=cvWaitKey(30);
  if(c==27) break;

当前帧被显示后,我们会等待33毫秒,接着播放下一帧。如果其间用户触发了一个按键,c就会被相应置成这个按键的ASCII码,ESC的ASCII码为27,所以ESC即表示退出当前视频播放。

cvReleaseCapture(&capture);
cvDestroyWindow("Example2");

退出视频播放,释放相应的指针和窗口。

小试牛刀:

#include<highgui.h>
int main(int argc,char** argv)
{
 cvNamedWindow("Michael");
 CvCapture* capture=cvCreateFileCapture("F:\\sample.avi");
 IplImage* frame;
 while(1)
 {
  frame=cvQueryFrame(capture);
  if(!frame) break;
  cvShowImage("Michael",frame);
  char c=cvWaitKey(30);
  if(c==27) break;
 }
 cvReleaseCapture(&capture);
 cvDestroyWindow("Michael");
}

此次,我播放的是我收集的一部电影《了不起的盖茨比》的部分剪辑,就是电影的那段放歌曲《young and beautiful》的片段。

程序写完后,可能必不能立即播放视频,首先要检查程序是否出错,一般只要出现视频一闪的情况程序可能就没问题,那么该如何才能正常播放视频了,我的只出现程序正确但老是一闪的情况,对于这种情况,网上有一些解法,我在这里推荐一种方法:

http://blog.csdn.net/makenothing/article/details/8128455,这是我在Google上搜到的,可以参考一下。

使用OPENCV播放AVI视频

原文:http://www.cnblogs.com/MichaelLi1994/p/3521439.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!