-1

我想通过 Viual Studio 2013 中的 Windows SDK 2.0 从 Kinect V2 获取深度和 RGB 数据。所以我编写了以下代码:

#include <Kinect.h>
#include <cmath>
#include <cstdio>
#include <cstdlib>
#include <Windows.h>
#include <iostream>
using namespace std;

const int width = 512;
const int height = 424;
const int colorwidth = 1920;
const int colorheight = 1080;

// Kinect Variables
IKinectSensor* sensor;             // Kinect sensor
IMultiSourceFrameReader* reader;   // Kinect data source
ICoordinateMapper* mapper;
int main(int argc, char* argv[]) {

if (FAILED(GetDefaultKinectSensor(&sensor))) {
    printf("not found sensor");
    getchar();
    return -100;
}
if (sensor) {
    sensor->get_CoordinateMapper(&mapper);

    sensor->Open();
    sensor->OpenMultiSourceFrameReader(
        FrameSourceTypes::FrameSourceTypes_Depth | FrameSourceTypes::FrameSourceTypes_Color,
        &reader);
    IMultiSourceFrame* framesource;

    cout << "Find!!!";
    getchar();
    return 100;
}
else {
    return -100;
}
getchar();
return 10;
}

从逻辑上讲,当我没有将 Kinect 传感器插入笔记本电脑时,控制台中应该打印:“未找到传感器”,不是吗?但是,在控制台打印:“查找!!!”。问题是什么?

4

1 回答 1

1

不,从 SDK v2 开始,您可以使用 KinectStudio 调试应用程序,即使没有物理 kinect 连接到系统。如果要检查是否连接了实际的 Kinect,则需要使用IsAvailable传感器本身的属性。除非您遇到运行时或安装问题,否则GetDefaultKinectSensor总会给您。不会检查此流是来自实际的物理 kinect 传感器还是来自 KinectStudio。S_OKGetDefaultKinectSensor

以下是我项目中的代码片段。如果您想了解更多有关 Kinect 的示例,请参考我在 github 中的项目https://github.com/shanilfernando/VRInteraction或在此处发表评论。我很乐意帮助你。

 HRESULT CDepthBasics::InitializeDefaultSensor()
    {
        HRESULT hr;

        hr = GetDefaultKinectSensor(&m_pKinectSensor);
        if (FAILED(hr))
        {
            return hr;
        }

        if (m_pKinectSensor)
        {
            if (SUCCEEDED(hr))
            {
                hr = m_pKinectSensor->get_CoordinateMapper(&m_pCoordinateMapper);
            }
            if (SUCCEEDED(hr))
            {
                hr = m_pKinectSensor->Open();
            }

            if (SUCCEEDED(hr))
            {
                hr = m_pKinectSensor->OpenMultiSourceFrameReader(
                    FrameSourceTypes::FrameSourceTypes_Depth | FrameSourceTypes::FrameSourceTypes_Color | FrameSourceTypes::FrameSourceTypes_Body | FrameSourceTypes::FrameSourceTypes_BodyIndex,
                    &m_pMultiSourceFrameReader);
            }


        }

        if (!m_pKinectSensor || FAILED(hr))
        {
            std::cout << "No ready Kinect found!" << std::endl;
            return E_FAIL;
        }
        else
        {
            std::cout << "Kinect found!" << std::endl;
        }

        return hr;
    }

https://github.com/shanilfernando/VRInteraction/blob/master/DepthBasics.cpp

编辑

我没有使用IsAvailable,因为该流来自哪里对我来说并不重要。有时我使用 KinectStudio 来获取流,而 Kinect 不在我身边。我说除非你有运行时或安装问题否则GetDefaultKinectSensor会返回S_OK,我没有说GetDefaultKinectSensor总是会给你一个有效的m_pKinectSensor. 由于我们无法访问GetDefaultKinectSensorand 作为一个好的实践的实现,所以最好null在使用它之前检查它或不检查它。这是 Microsoft 对您的问题的官方回答

于 2017-07-10T05:50:13.580 回答