Visual Studio — код C ++: логическая ошибка при поиске датчика Kinect

Я хочу получить данные глубины и RGB из Kinect V2 с помощью Windows SDK 2.0 в Viual Studio 2013. Поэтому я пишу эти коды:

#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 к своему ноутбуку, в консоли должно быть напечатано: «Не найден датчик», не так ли? Но в консоли напечатано: «Найди !!!». в чем проблема?

-1

Решение

Нет, начиная с SDK v2, вы можете отлаживать приложение с помощью KinectStudio, даже если физический kinect не подключен к системе. Если вы хотите проверить, подключен ли фактический Kinect, вам нужно использовать IsAvailable свойство самого датчика. GetDefaultKinectSensor всегда даст вам S_OK если у вас нет проблем во время выполнения или установки. GetDefaultKinectSensor не будет проверять, исходит ли этот поток от фактического физического датчика Kinect или от KinectStudio.

Ниже приведен фрагмент кода из моего проекта. Если вы хотите больше примеров о 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, Поскольку у нас нет доступа к реализации GetDefaultKinectSensor и как хорошая практика, лучше это проверить null или нет, прежде чем использовать его. Это официальный ответ на ваш вопрос от Microsoft

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]