(转载请注明出处)
使用SDK: Kinect for Windows SDK v2.0 public preview
这次说说这骨骼帧的获取。嗯,Kinect买来就为这个啊。不然其他数据,买其他产品就行了,Kinect的卖点也是这个。
先看看这次支持的骨骼关节:
enum _JointType
{
JointType_SpineBase = 0,
JointType_SpineMid = 1,
JointType_Neck = 2,
JointType_Head = 3,
JointType_ShoulderLeft = 4,
JointType_ElbowLeft = 5,
JointType_WristLeft = 6,
JointType_HandLeft = 7,
JointType_ShoulderRight = 8,
JointType_ElbowRight = 9,
JointType_WristRight = 10,
JointType_HandRight = 11,
JointType_HipLeft = 12,
JointType_KneeLeft = 13,
JointType_AnkleLeft = 14,
JointType_FootLeft = 15,
JointType_HipRight = 16,
JointType_KneeRight = 17,
JointType_AnkleRight = 18,
JointType_FootRight = 19,
JointType_SpineShoulder = 20,
JointType_HandTipLeft = 21,
JointType_ThumbLeft = 22,
JointType_HandTipRight = 23,
JointType_ThumbRight = 24,
JointType_Count = ( JointType_ThumbRight + 1 )
} ;
支持这25个关节点,不排除会增加的可能,毕竟近景可以分辨十指。
每个关节的状态用这个结构体描述:
typedef struct _Joint
{
JointType JointType;
CameraSpacePoint Position;
TrackingState TrackingState;
} Joint;
JointType就是之前的关节编号,Position是Kinect的相机空间坐标,是三维的。TrackingState是目前关节的追踪状态,
有: 未追踪(0),位置是推测的(1),位置是追踪的(2)
值得说明的是这次C++的SDK也提供了判断手的状态:
enum _HandState
{
HandState_Unknown = 0,
HandState_NotTracked = 1,
HandState_Open = 2,
HandState_Closed = 3,
HandState_Lasso = 4
} ;
有:未知(0),未追踪(1),摊开(2),握拳(3)以及Lasso(4),Lasso不知道怎么翻译,大概就是处于摊开与握拳之间的状态,
比如:或者
甚至这样
都能称为Lasso。
使用方法和之前的差不多,说说不同的: