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.
还没有评论,来说两句吧...