Kinect面部跟踪功能在c ++中使用StartTracking不能给出预期的结果

时间:2012-10-11 10:13:48

标签: c++ kinect kinect-sdk

我正在使用Kinect SDK 1.5,当我想跟踪多个面时发现了一些问题。

在我的代码中,我首先使用

myFaceTracker->DetectFaces(&sensor, NULL, candidates, &nums)

获取当前检测到的面部,并将它们的位置与已经跟踪的面部进行比较。

当前未跟踪的面孔将被添加到队列中,以便在下一步中进行跟踪。

但是当我想使用StartTracking函数跟踪它们时,它不会给出预期的结果。

例如:

//Time for us to track those not tracked
RECT rect = queue_face.front();

//Make the region larger than orginal
int length_vertical = rect.bottom - rect.top;
int length_horizontal = rect.right - rect.left;
rect.top    = rect.top - length_vertical * 2;
rect.bottom = rect.bottom + length_vertical * 2;
rect.left   = rect.left - length_horizontal * 2;
rect.right  = rect.right + length_horizontal * 2;

//Use OpenCV to see if it gets right
CvPoint LT = cvPoint(rect.left, rect.top);
CvPoint LB = cvPoint(rect.left, rect.bottom);
CvPoint RT = cvPoint(rect.right, rect.top);
CvPoint RB = cvPoint(rect.right, rect.bottom);

cvLine(_img, LT, LB, cvScalar(0, 255, 0), 2);
cvLine(_img, LB, RB, cvScalar(0, 255, 0), 2);
cvLine(_img, RB, RT, cvScalar(0, 255, 0), 2);
cvLine(_img, RT, LT, cvScalar(0, 255, 0), 2);

//Here turns out to be some problem
result = facetracker->StartTracking(&sensor, &rect, NULL, faceresult);

//Check Result
is_track = SUCCEEDED(result) && SUCCEEDED(faceresult->GetStatus());
queue_face.pop();

....

即使状态显示成功,上面的代码也会给我一个完全无用的结果 如果我们使用

faceresult->GetFaceRect(rect);

它给了我们一个带有(0,0,0,0)的矩形!

但如果我们改变

result = facetracker->StartTracking(&sensor, &rect, NULL, faceresult);

result = facetracker->StartTracking(&sensor, NULL, NULL, faceresult);

现在它会给我们一些有用的东西,但通过这种方式,它几乎不可能控制我们想跟踪的人。

我也尝试将输入rect看到(0,0,width-1,height-1),但更糟糕的是,现在它说它无法跟踪任何内容。

有人会帮我吗?

非常感谢。

0 个答案:

没有答案