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来画。

时间: 2024-08-07 21:55:44

Kinect for Windows V2和V1对比开发___骨骼数据获取的相关文章

Kinect for Windows V2和V1对比开发___彩色数据获取

V1彩色分辨率:640x480 V2彩色分辨率:1920x1080 1,打开彩色图像帧的方式 对于V1: 使用NuiImageStreamOpen方法打开 hr = m_PNuiSensor->NuiImageStreamOpen( NUI_IMAGE_TYPE_COLOR,NUI_IMAGE_RESOLUTION_640x480,0, 2, m_hNextColorFrameEvent,&m_hColorStreamHandle); if( FAILED( hr ) ) { cout<

Kinect for Windows V2和V1对比开发___深度数据获取

V1深度分辨率:320x240 V2深度分辨率:512x424 1,  打开深度图像帧的方式 对于V1: hr = m_PNuiSensor->NuiImageStreamOpen( NUI_IMAGE_TYPE_DEPTH,NUI_IMAGE_RESOLUTION_320x240,0, 2, m_hNextDepthFrameEvent, &m_hDepthStreamHandle); if( FAILED( hr ) ) { cout<<"Could notopen

Kinect for Windows V2和V1对比开发___多台Kinect的使用

对于V1 <span style="white-space:pre"> </span>INuiSensor * pNuiSensor; HRESULT hr; int iSensorCount = 0; hr = NuiGetSensorCount(&iSensorCount); if (FAILED(hr)) { return hr; } //轮询每一个Kinect sensor for (int i = 0; i < iSensorCount;

Kinect for Windows V2和V1对照开发___彩色数据获取并用OpenCV2.4.10显示

V1彩色分辨率:640x480 V2彩色分辨率:1920x1080 1,打开彩色图像帧的方式 对于V1: 使用NuiImageStreamOpen方法打开 hr = m_PNuiSensor->NuiImageStreamOpen( NUI_IMAGE_TYPE_COLOR,NUI_IMAGE_RESOLUTION_640x480,0, 2, m_hNextColorFrameEvent,&m_hColorStreamHandle); if( FAILED( hr ) ) { cout<

Kinect for Windows V2开发教程

Windows版Kinect SDK https://docs.microsoft.com/en-us/previous-versions/windows/kinect/dn799271(v=ieb.10)?redirectedfrom=MSDN 开发文档中,前1个小节,What’s New和Known Issues都未有内容.然后Features特点章节中给出了不少参数.新的K4W sdk(Kinect for windows sdk)有以下特点: #使用XBox One Kinect传感器

Kinect for Windows V2.0 新特性

外观: 第二代Kinect for Windows看起来与Kinect for Xbox One相同,用以区别的是Windows版Kinect顶部写着Kinect,Xbox版只有一个绿色的X. Kinect for Windows 2.0 Kinect for Xbox One 主要性能改进: 深度传感:通过更高的深度保真和大幅改进的噪声基底,第二代传感器打造空前的3D视觉效果,通过功能改进,能够看到清晰更小的物体以及提高骨骼追踪的稳定性. 1080p高清视频:1080p 全高清视频呈现高清晰画

Kinect For Windows V2开发日志一:开发环境的配置

算是正式进军Kinect了,前段时间学的东西现在就忘了,于是从此开始记录一下. 目前为止大部分的学习资料来自于Heresy的博客,写的非常优秀,清晰明了,十分感谢.开发语言为C++,应该会一直使用,但是也有可能更换为C#. 文档位于MSDN,所有的用法都可以在这里找到. 首先应该到微软官网下载SDK,安装完后就开始配置. VS 2015的配置: 在写项目之前首先要配置好VS的环境,我用的是VS 2015社区版,SDK版本为2.0,配置方式如下: 首先,新建个项目,然后在[解决方案资源管理器]中右

Kinect For Windows V2开发日志二:Kinect V2的基本参数

以下内容节选自Heresy的博客: 彩色影像:1920 x 1080 @ 30 / 15 FPS(根据环境亮度) 深度影像:512 x 424 @ 30 FPS.16bit 距离值(mm).可侦测范围0.5 ~ 8 M 红外线影像:512 x 424 @ 30 FPS.16bit 强度值 声音资讯 根据上面的原始资料,则可以再透过软体,进行人体的追踪.骨架的辨识(0.5 ~ 4.5 M).在K4Wv2 下,最多六个人.每个人25 个关节点(右图),其中每个关节点都可以取得空间中的位置.以及方向性

Kinect for Windows V2 SDK+ VS2012 环境搭建

目前使用的SDK版本是KinectSDK-v2.0-PublicPreview1409-Setup.exe. 下载地址:点击打开链接 1,在Property Manager窗口中,右键Debug|Win32,选择Add New Project Property Sheet. 2,选择Property Sheet(.props),Name:Kinect_ProjectD,Location:选择工程主目录,这样以后再用Kinect,配置可以直接添加Kinect_ProjectD.props. 3,选