Kinect for Windows V2和V1对比开发___骨骼数据获取

1,       打开骨骼帧的方式

对于V1,

方法NuiSkeletonTrackingEnable实现
            m_hNextSkeletonEvent = CreateEvent(NULL, TRUE, FALSE, NULL );
            hr =m_PNuiSensor->NuiSkeletonTrackingEnable(
                       m_hNextSkeletonEvent,
            NUI_SKELETON_TRACKING_FLAG_ENABLE_IN_NEAR_RANGE//|
                       );
            if( FAILED( hr ) )
                  {
                       cout<<"Couldnot open skeleton stream video"<<endl;
                       return hr;
                  }


对于V2

// Initialize the Kinect andget coordinate mapper and the body reader
        IBodyFrameSource* pBodyFrameSource = NULL;
 
        hr = m_pKinectSensor->Open();
 
        if (SUCCEEDED(hr))
        {
            hr = m_pKinectSensor->get_CoordinateMapper(&m_pCoordinateMapper);
        }
方法get_CoordinateMapper得到坐标映射
        if (SUCCEEDED(hr))
        {
            hr =m_pKinectSensor->get_BodyFrameSource(&pBodyFrameSource);
        }
方法get_BodyFrameSource得到骨骼帧源
        if (SUCCEEDED(hr))
        {
            hr =pBodyFrameSource->OpenReader(&m_pBodyFrameReader);
        }
方法get_BodyFrameSource打开骨骼帧读取器
        SafeRelease(pBodyFrameSource);
    }


2,更新骨骼帧方式

对于V1,方法NuiSkeletonGetNextFrame实现

NUI_SKELETON_FRAMESkeletonFrame;//骨骼帧的定义 
            bool bFoundSkeleton = false; 
 
            if(SUCCEEDED(NuiSkeletonGetNextFrame( 0, &SkeletonFrame )) )//Get the next frameof skeleton data.直接从kinect中提取骨骼帧


对于V2,

竟然木有发现如何更新的哎,再慢慢看吧。。。

3,画骨架方式:

对于V1,主要用opencv辅助来画,用到cvLine方法

例如左上肢的实现为:

   

//左上肢  
    if((pointSet[NUI_SKELETON_POSITION_SHOULDER_CENTER].x!=0 ||pointSet[NUI_SKELETON_POSITION_SHOULDER_CENTER].y!=0) &&  
       (pointSet[NUI_SKELETON_POSITION_SHOULDER_LEFT].x!=0 ||pointSet[NUI_SKELETON_POSITION_SHOULDER_LEFT].y!=0))  
        cvLine(SkeletonImage, pointSet[NUI_SKELETON_POSITION_SHOULDER_CENTER],pointSet[NUI_SKELETON_POSITION_SHOULDER_LEFT], color, 2);  
    if((pointSet[NUI_SKELETON_POSITION_SHOULDER_LEFT].x!=0 ||pointSet[NUI_SKELETON_POSITION_SHOULDER_LEFT].y!=0) &&  
        (pointSet[NUI_SKELETON_POSITION_ELBOW_LEFT].x!=0|| pointSet[NUI_SKELETON_POSITION_ELBOW_LEFT].y!=0))  
        cvLine(SkeletonImage,pointSet[NUI_SKELETON_POSITION_SHOULDER_LEFT],pointSet[NUI_SKELETON_POSITION_ELBOW_LEFT], color, 2);  
    if((pointSet[NUI_SKELETON_POSITION_ELBOW_LEFT].x!=0 ||pointSet[NUI_SKELETON_POSITION_ELBOW_LEFT].y!=0) &&  
       (pointSet[NUI_SKELETON_POSITION_WRIST_LEFT].x!=0 ||pointSet[NUI_SKELETON_POSITION_WRIST_LEFT].y!=0))  
        cvLine(SkeletonImage,pointSet[NUI_SKELETON_POSITION_ELBOW_LEFT],pointSet[NUI_SKELETON_POSITION_WRIST_LEFT], color, 2);  
    if((pointSet[NUI_SKELETON_POSITION_WRIST_LEFT].x!=0 ||pointSet[NUI_SKELETON_POSITION_WRIST_LEFT].y!=0) &&  
       (pointSet[NUI_SKELETON_POSITION_HAND_LEFT].x!=0 ||pointSet[NUI_SKELETON_POSITION_HAND_LEFT].y!=0))  
        cvLine(SkeletonImage,pointSet[NUI_SKELETON_POSITION_WRIST_LEFT],pointSet[NUI_SKELETON_POSITION_HAND_LEFT], color, 2);  


对于V2,主要借助Direct2D微软的图形图像API,具体详细可以查阅资料。。当然也可以转换为用opencv来画。

Kinect for Windows V2和V1对比开发___骨骼数据获取

上一篇:JQuery data API实现代码分析


下一篇:windows 服务安装脚本拾遗