我正在使用 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);
现在它会给我们一些有用的东西,但是通过这种方式,几乎不可能控制我们想要跟踪的人。
我还尝试查看 (0, 0, width-1, height-1) 的输入矩形,但更糟糕的是,现在它说它无法跟踪任何内容。
有人会给我帮助吗?
非常感谢。