【OpenCV 基础知识 8】创建视频滑动条

【OpenCV 基础知识 8】创建视频滑动条

码农世界 2024-05-23 后端 61 次浏览 0个评论

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

  • 定义:

    CV_EXTERN_C_FUNCPTR( void (CvTrackbarCallback)(int pos) );

    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的显示位置。

    program cv_CreateTrackbar;
    {$APPTYPE CONSOLE}
    {$R *.res}
    uses
      System.SysUtils,
      ocv.highgui_c,
      ocv.core_c,
      ocv.core.types_c,
      uResourcePaths;
    const
      filename = cResourceMedia + '768x576.avi';
    var
      capture: pCvCapture = nil;
      frame: pIplImage = nil;
      framesCount: Double;
      frames: Integer;
      currentPosition: Integer;
      c: Integer;
    procedure myTrackbarCallback(pos: Integer); cdecl;
    begin
      cvSetCaptureProperty(capture, CV_CAP_PROP_POS_FRAMES, pos);
    end;
    begin
      try
        cvNamedWindow('original', CV_WINDOW_AUTOSIZE);
        // 读入avi文件,返回一个指向CvCapture结构的指针
        capture := cvCreateFileCapture(filename);
        // 获取到视频的各种属性,比如帧率、视频大小、编码格式等
        framesCount := cvGetCaptureProperty(capture, CV_CAP_PROP_FRAME_COUNT);
        Writeln('[i] count: ', framesCount);
        frames := Trunc(framesCount);
        currentPosition := 0;
        if (frames <> 0) then
          // 创建trackbar(滑动条)并将它添加到指定的窗口
          cvCreateTrackbar('Position', 'original', @currentPosition, frames, myTrackbarCallback);
        while True do
        begin
          frame := cvQueryFrame(capture);
          if not Assigned(frame) then
            Break;
          cvShowImage('original', frame);
          c := cvWaitKey(33);
          if (c = 27) then
            Break;
        end;
        cvReleaseCapture(capture);
        cvDestroyWindow('original');
      except
        on E: Exception do
          Writeln(E.ClassName, ': ', E.Message);
      end;
    end.
    

转载请注明来自码农世界,本文标题:《【OpenCV 基础知识 8】创建视频滑动条》

百度分享代码,如果开启HTTPS请参考李洋个人博客
每一天,每一秒,你所做的决定都会改变你的人生!

发表评论

快捷回复:

评论列表 (暂无评论,61人围观)参与讨论

还没有评论,来说两句吧...

Top