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

#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()可设置滚动条的名称并确定滚动条的所属窗口。

时间: 2024-10-24 11:30:28

openCV1.0 播放AVI视频并实现进度条的相关文章

OpenCV 入门示例之二:播放 AVI 视频

前言 本文展示一个播放 AVI 视频的程序.( 呵呵是 AVI 视频不是 AV 视频噢! ) 代码示例 OpenCV 入门示例之二:播放 AVI 视频,布布扣,bubuko.com

ASP.NET MVC应用程序播放AVI视频

前面Insus.NET实现一系列在MVC应用程序播放SWF, FLV, WMV, RM, RMVB视频.每篇使用不同的方法方式,大同小异.这篇中,为了MVC应用程序播放AVI视频,用纯M, V, C来演示. 在M中:创建一个model,由于前一次练习中<MVC应用程序播放RealPlayer(rmvb)视频>http://www.cnblogs.com/insus/p/3611497.html 已经创建直接用就好了,当然如果你没有按照Insus.NET的学习步骤来的话,在你的应用程序中没有此m

OpenCV学习 2:播放AVI视频

原创文章,欢迎转载,转载请注明出处 第二个程序,播放视频.用opencv做起来是如此的简单..哈哈.           学Opencv,只是为了在它的基础上实现工程应用,而它里面高深的理论我等屌丝只能感叹了,希望学习的效果是能清楚 了解视觉方面所需要用到的工具和对他们有一定的了解,后续通过对这些理论和工具的了解实现相应的视觉功能,现在还不够熟悉,就照着教材和API学习下.          视频,就是一张一张的画面,正常大于24帧人眼就看不到闪烁了.程序的大概思路就是通过opencv给的函数接

cocos2d-x 3.0 播放MP4视频

猴子原创,欢迎转载. 转载请注明: 转载自Cocos2D开发网–Cocos2Dev.com,谢谢. 原文地址: http://www.cocos2dev.com/?p=545 非常久曾经写的一个2dx播放MP4视频的教材.有网友反映已经不能用了,今天晚上写了个简单的2dx播放视频类.使用的是cocos2dx 3.0. 类说明:LHVideoPlayerImplCpp.h/mm // cocos2dx中使用的播放MP4接口LHVideoPlayerImpl.h/m // videoPlayer的o

video标签播放视频不能拖动进度条

因为你的video的src不是直接使用视频文件的地址,而是通过后台接口返回文件流,后台返回流的时候没为response的header设置一些参数,否则会在部分浏览器有问题 String rangeString = request.getHeader("Range");//如果是video标签发起的请求就不会为null long range = Long.valueOf(rangeString.substring(rangeString.indexOf("=") +

小米视频加载进度条效果实现

好吧,其实这些都是我闲暇时自己做着玩的,以前总是拿来主义,现在分享一下让我也为大家做一点贡献好了.废话不说了,看效果. 好吧 其实没什么技术含量 直接上代码好了 和我上一篇利用WPF动画实现圆形进度条是一个道理,表现形式不同而已. 1 <UserControl x:Class="MyUserControlLibrary.CircleProgressbarcontrol" 2 xmlns="http://schemas.microsoft.com/winfx/2006/x

[学习OpenCV攻略][004][播放AVI视频]

cvCreateFileCapture(文件路径) 创建一个影音文件录像机,返回值为CvCapture类型,用于读取视频文件 cvQuerFrame(视频) 将下一帧视频文件载入内存,当CvCapture被释放时,每一帧对应的内存会被释放,所以不需要cvReleaseImage(&frame); cvReleaseCapture(视频) 释放CvCapture结果的内存空间,同时也会关闭所有打开的视频文件相关的句柄. #include "highgui.h" int main(

播放本地视频

1.播放本地视频 PlayLocationVideoInSDActivity.java 关键点1: String path = "/sdcard/TZH.mp4"; //String path2 = ""+Environment.getExternalStorageDirectory()+"/TZH.mp4";//等价上面的地址 关键点2:控制进度条 package com.example.videoplaydemo; import androi

OpenCV 播放mkv视频

作者:卿笃军 原文地址:http://blog.csdn.net/qingdujun/article/details/33371013 一.一个简单的OpenCV程序,用于播放硬盘中的视频文件 #include "opencv\highgui.h" int main() { cvNamedWindow("生活大爆炸.mkv",CV_WINDOW_AUTOSIZE); CvCapture* capture = cvCreateFileCapture("生活大