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.