zoukankan      html  css  js  c++  java
  • opencv播放视屏并控制位置

    原文地址:http://blog.csdn.net/augusdi/article/details/9000592

    cvGetCaptureProperty是我们需要使用到的获取视频属性的函数。

    1. double cvGetCaptureProperty( CvCapture* capture, int property_id );  


    capture 视频获取结构。
    property_id 属性标识。
    CV_CAP_PROP_POS_MSEC - 影片目前位置,为毫秒数或者视频获取时间戳
    CV_CAP_PROP_POS_FRAMES - 将被下一步解压/获取的帧索引,以0为起点
    CV_CAP_PROP_POS_AVI_RATIO-视频文件的相对位置(0 - 影片的开始,1 - 影片的结尾)
    CV_CAP_PROP_FRAME_WIDTH - 视频流中的帧宽度
    CV_CAP_PROP_FRAME_HEIGHT-视频流中的帧高度
    CV_CAP_PROP_FPS - 帧率
    CV_CAP_PROP_FOURCC - 表示codec的四个字符
    CV_CAP_PROP_FRAME_COUNT- 视频文件中帧的总数
    函数cvGetCaptureProperty获得摄像头或者视频文件的指定属性。
    译者注:有时候这个函数在cvQueryFrame被调用一次后,再调用cvGetCaptureProperty才会返回正确的数值。这是一个bug,建议在调用此函数前先调用cvQueryFrame。
    cvCreateTrackbar(创建滚动条)

    该函数为开放计算机视觉(OpenCV)库库函数,创建trackbar并将它添加到指定的窗口。
    定义:

    1. CV_EXTERN_C_FUNCPTR( void (*CvTrackbarCallback)(int pos) );  
    2. int cvCreateTrackbar( const char* trackbar_name, const char* window_name, int* value, int count, CvTrackbarCallback on_change );  

    参数:
    trackbar_name 被创建的trackbar名字。
    window_name 窗口名字,这个窗口将为被创建trackbar的父对象。
    value 整数指针,它的值将反映滑块的位置。这个变量指定创建时的滑块位置。
    count 滑块位置的最大值。最小值一直是0。
    on_change 每次滑块位置被改变的时候,被调用函数的指针。这个函数应该被声明为void Foo(int); 如果没有回调函数,这个值可以设为NULL。
    函数cvCreateTrackbar用指定的名字和范围来创建trackbar(滑块或者范围控制),指定与trackbar位置同步的变量,并且指定当trackbar位置被改变的时候调用的回调函数。
    被创建的trackbar默认显示在指定窗口的顶端,可以通过函数cvGetTrackbarPos来获取trackbar显示的位置信息,以及通过函数cvSetTrackbarPos来重新设置trackbar的显示位置。

    代码如下:

      1. #include <cv.h>    
      2. #include <highgui.h>    
      3.     
      4. CvCapture* capture = NULL;    
      5. int pos=0;  //视频位置    
      6. void ON_Change(int n)    
      7. {    
      8.     cvSetCaptureProperty(capture,CV_CAP_PROP_POS_FRAMES,n);     //设置视频走到pos位置    
      9. }    
      10. int _tmain(int argc, _TCHAR* argv[])    
      11. {    
      12.     cvNamedWindow("show");  //新建一个窗口    
      13.     capture  =cvCreateFileCapture("F:\TDDOWNLOAD\10.Little.Asians.16\fle-10la16a.avi");//创建一个视频    
      14.     int frames = (int)cvGetCaptureProperty(capture,CV_CAP_PROP_FRAME_COUNT);        //返回视频帧的总数    
      15.         
      16.     cvCreateTrackbar("frame","show",&pos,frames,ON_Change);//创建滚动条    
      17.     IplImage * frame;//声明视频帧    
      18.     while(1)    
      19.     {    
      20.         frame = cvQueryFrame(capture);  //获取下一帧图像    
      21.         if (!frame)    
      22.         {    
      23.             break;          //如果不存在退出    
      24.         }    
      25.         pos++;              //播放一帧位置加1    
      26.         //cvSetTrackbarPos("frame","show",pos);//设置进度条位置 加入此语句后视频会变卡    
      27.         cvShowImage("show",frame);      //在窗口显示图像    
      28.         char c = cvWaitKey(33);         //间隔33ms    
      29.         if (c == 27)                    //如果按下Esc键中断     
      30.          break;    
      31.             
      32.     }    
      33.     cvReleaseCapture(&capture); //释放视频空间    
      34.     cvDestroyWindow("show");    //销毁窗口    

  • 相关阅读:
    leetcode bugfree note
    leetcode 419
    leetcode 165
    leetcode 155
    leetcode 204
    leetcode 28
    将二叉搜索树转为有序双向链表
    leetcode 397
    ABAP 动态内表创建/赋值
    ABAP 屏幕下拉框值根据选择框填值赋值
  • 原文地址:https://www.cnblogs.com/dragon2012/p/3336245.html
Copyright © 2011-2022 走看看