码迷,mamicode.com
首页 > 其他好文 > 详细

openCV1.0 播放AVI视频并实现进度条

时间:2017-11-02 21:22:47      阅读:150      评论:0      收藏:0      [点我收藏+]

标签:inpu   实现   src   open   1.0   长度   进度条   表示   named   

#include "cv.h"
#include "highgui.h"

int g_slider_position = 0;
CvCapture* g_capture = NULL;

void onTrackbarSlide(int pos) {
  cvSetCaptureProperty(g_capture, CV_CAP_PROP_POS_FRAMES, pos);
}

int main(int argc, char **argv)
{
  cvNamedWindow("Example3", CV_WINDOW_AUTOSIZE);
  if (argc == 2 && (g_capture = cvCreateFileCapture(argv[1])) != 0)
  {
    int frames = (int)cvGetCaptureProperty(
      g_capture,
      CV_CAP_PROP_FRAME_COUNT
    );
    if (frames != 0) {
      cvCreateTrackbar(
      "Position",
      "Example3",
      &g_slider_position,
      frames,
      onTrackbarSlide
    );
  }
  IplImage* frame;
  while (1) {
    frame = cvQueryFrame(g_capture);
    if (!frame) break;
    cvShowImage("Example3", frame);
    char c = cvWaitKey(33);
    if (c == 27) break;
  }
  cvReleaseCapture(&g_capture);
  cvDestroyWindow("Example3");

  return 0;
}
  return -1;
}

运行效果如下:

 技术分享

 

本代码段通过一个全局变量读取滚动条位置并且当滚动条位置发生变化时通过回调函数调用重新设置视频读入位置。

int g_slider_position = 0;

CvCapture* g_capture = NULL;

g_slider_position是滚动条的位置, g_capture是回调函数的input参数。

void onTrackbarSlide(int pos){

  cvSetCaptureProperty(

  g_capture, 

  CV_CAP_POS_PRAMES,

  pos);

}

onTracebarSlide是一个回调函数,目的是在每一次进度条有变化的时候通知图像加载到进度条指向的那一帧。cvCreateTrackbar函数的第五个参数实现onTracebarSlide的注册。

本程序中我们设置参数CV_CAP_PROP_POS_PRAMES,本参数表示以帧数来设置读入位置,如果想通过以视频长度比例来设置读入位置,我们可以通过AVI_RATIO代替FRAMES来实现。

cvCreateTrackbar()可设置滚动条的名称并确定滚动条的所属窗口。

 

openCV1.0 播放AVI视频并实现进度条

标签:inpu   实现   src   open   1.0   长度   进度条   表示   named   

原文地址:http://www.cnblogs.com/gq5251/p/7774115.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!