Kinect + OpenNI:如何删除用户

3

我正在处理用户追踪的问题:我已经注册了回调函数(User_NewUser,User_LostUser,Pose_Detected,Calibration_Start,Calibration_End)。当我进入传感器区域时,我被正确地检测和校准。但是当我离开传感器区域(没有其他人在内部)时,我希望程序调用回调函数“User_LostUser”,但似乎并没有这样做。(事实上,当我再次进入时,传感器仍然跟踪我!)我期望当用户离开场景时,程序取消注册/删除他并重新开始检查新用户:有谁能帮帮我吗?

void XN_CALLBACK_TYPE User_LostUser(xn::UserGenerator& generator, XnUserID nId,
    void* pCookie) {
generator.GetPoseDetectionCap().StopPoseDetection(nId);
generator.GetPoseDetectionCap().Release();
generator.GetPoseDetectionCap().StartPoseDetection("Psi", nId);
}
2个回答

5

离开场景后,OpenNI(实际上是NITE)会在几秒钟内继续跟踪您。如果您稍等片刻,最终应该会得到LostUser回调。

话虽如此,如果您想自己检测用户离开场景,可以获取用户质心(使用UserGenerator :: GetCoM)。当用户离开场景时,质心将为0,0,0。


1
您还可以注册 RegisterToUserExit 回调函数,该函数会在用户离开区域后立即触发。
// register user callbacks

XnCallbackHandle user_cb_exit_handle;

user_generator.RegisterToUserExit(
User_ExitUser
,this
,user_cb_exit_handle
);

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接