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

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.
  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

D-Nolan

请我喝杯咖啡吧,鼓励一下创作!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值