机器人视觉项目:视觉检测识别+机器人跟随(15)

### kinect + winSDK代码
```

#include 

#include  

#include 

#include 



using namespace std;

using namespace cv;



//通过传入关节点的位置,把骨骼画出来

void drawSkeleton(Mat &image, CvPoint pointSet[], int whichone);



int main(int argc, char *argv[])

{

    Mat skeletonImage;

    skeletonImage.create(240, 320, CV_8UC3);

    CvPoint skeletonPoint[NUI_SKELETON_COUNT][NUI_SKELETON_POSITION_COUNT]={cvPoint(0,0)};

    bool tracked[NUI_SKELETON_COUNT]={FALSE}; 



    //1、初始化NUI,注意这里是USES_SKELETON

    HRESULT hr = NuiInitialize(NUI_INITIALIZE_FLAG_USES_SKELETON); 

    if (FAILED(hr)) 

    { 

        cout<<"NuiInitialize failed"< 骨骼帧数据保存在NUI_SKELETON_FRAME结构体中,结构体成员:

> 时间标志字段--dwFrameNumber和liTimestamp字段标志当前记录中的帧序列信息。

> 骨骼数据段--SkeletonData[NUI_SKELETON_COUNT]定义了6个各个数据,eTrackingState字段表示当前的骨骼数据字段(枚举类型),三个状态值;dwTrackingID追踪对象的编号;

> Position(Vector4)类型字段,代表所有骨骼的中间点
Vector4typedef struct _Vector4 {
   FLOAT x;  //X coordinate
   FLOAT y;  //Y coordinate
   FLOAT z;  //Z coordinate
   FLOAT w;  //W coordinate
} Vector4;

> SkelenPositions[20] --20 个关节点的空间位置信息,每一个关节点有类型为Vector4的位置属性,通过XYZ三个值描述关节点的位置。

> SkeletonPositionTrackingState[20]跟踪骨骼的评价参数
NUI_SKELETON_POSITION_INDEX:20个关节点数据的保存序号

> 代码中的平滑处理NuiTranformSmooth(&skelentonFrame,NULL)

> 还有一个重要的函数 空间坐标转换
NUiTransformSkeletonToDepthImage(pSkel->SkeletonPositiona[i], &fx,&fy)
深度图像数据和猜测图像数据图上的位置不严格意义对应,骨骼数据的坐标又和深度图像和彩色图像的不一样。所以就存在了彩色坐标空间、深度坐标空间、骨骼坐标空间和你的UI坐标空间四个不同的坐标空间,不同的坐标系之间的位置坐标转换。

 

你可能感兴趣的:(机器人,2018暑期)