Kinect开发笔记(一)
一、OpenCV环境搭建
具体流程网上博客很多,主要注意以下两点:
- debug模式和release模式的的区别,分别连接对应的lib文件,选用x64模式(x86好像不支持)。
- 如果设置环境变量后依然报错找不到对应的dll文件,直接将E:\OpenCV\opencv\build\x64\vc15\bin(OpenCV安装路径)中的dll拷贝到C:\Windows\System32中,以及C:\Windows\SysWOW64中。
二、 骨架信息:
kinect 2.0可以同时追踪六个人的骨架,因此每次我们需要先调用函数,获得六个骨架信息(如果没有人,那么那个骨架类就是空指针)。代码为:
pBodyFrame->GetAndRefreshBodyData(_countof(ppBodies), ppBodies);
这里ppBodies是一个长度为6的IBody数组,IBody是用来存储追踪到的骨架信息的类。
在获得了这个类后,我们需要进一步从类中提取骨架位置,对于ppBodies中的每一个元素pBody,代码为:
pBody->GetJoints(_countof(joints), joints);
这里的joints是一个长度为25的数组,每一个元素就是骨架的位置信息。然而, 这个骨架位置信息是照相机坐标系(camera view)下的位置,x和y的范围都是-1到1。因此我们需要将它转化到深度坐标系中。这里要用到一个coordinateMapper类,具体代码为:
m_pCoordinateMapper->MapCameraPointToDepthSpace(joints[j].Position, &depthSpacePosition[j]);
coordinateMapper类的创建非常简单,具体可以参考代码。depthSpacePosition是一个长度也为25的数组,每一个元素是DepthSpacePoint,这个元素包含了在深度坐标系下的x和y坐标。
三、关节数据
Joint myJointArr[JointType_Count];//JointType_Count=25
typedef struct _Joint
{
JointType JointType;
CameraSpacePoint Position;
TrackingState TrackingState;
} Joint;
typedef enum _JointType JointType;
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 )
} ;
typedef struct _CameraSpacePoint
{
float X;
float Y;
float Z;
} CameraSpacePoint;
typedef enum _TrackingState TrackingState;
enum _TrackingState
{
TrackingState_NotTracked = 0,
TrackingState_Inferred = 1,
TrackingState_Tracked = 2
} ;
四、坐标
名称 | 应用的数据源 | 维数 | 单位 | 范围 | 原点 |
---|---|---|---|---|---|
ColorSpacePoint | Color | 2维 | 像素 | 1920x1080 | 左上角 |
DepthSpacePoint | Depth,Infrared,Body index | 2维 | 像素 | 512x424 | 左上角 |
CameraSpacePoint | Body | 3维 | 米 | – | 红外/深度摄像头 |