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