刚开始接触Kinect2.0,默认能够检测6个人,而我想单纯的检测最前面的那个人。网上找了很多资料,但C#的资料少之又少,看了很多C++,但有些地方也不是很了解,最后采取最笨的方法。将6个人的关节数据来对比,取最近的那个。基于Kinect2.0官方的BodyBasics-WPF。代码很简单:
定义一个距离的中间变量和一个身体数据,用来表示最近的那个
private void Reader_FrameArrived(object sender, BodyFrameArrivedEventArgs e)
{
bool dataReceived = false;
Body body1; //定义一个身体数据,用来装最近的那个身体
double i_face =10.0;//设置人体距离变量
人体数据都被存储在 bodies[] 里面,我们可以从bodies[]里面找出,你可以认为bodies[0]存了第一个人的所有关节数据,bodies[1]存了第二个人,依次类推,最多6个人。所以我
在官方代码中添加一个For循环,通过比较6个人的头部距离,来比较出一个最近的。当然你也可以用其他的关节数据来比较。
foreach (JointType jointType in joints.Keys)
{
// 有时推断的关节的深度(Z)可能表现为负值
// 钳位到0.1f以防止坐标映射器返回(-Infinity,-Infinity)
CameraSpacePoint position = joints[jointTyp