Ниже приведен код C ++, который непрерывно выбирает последний кадр из Kinect 2.
#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;
IDepthFrameReader* reader; // Kinect depth data source
IKinectSensor* sensor = nullptr;
int main(int argc, char* argv[]) {
if (FAILED(GetDefaultKinectSensor(&sensor))) {
return 19;
}
if (sensor) {
sensor->Open();
IDepthFrameSource* framesource = NULL;
sensor->get_DepthFrameSource(&framesource);
framesource->OpenReader(&reader);
if (framesource) {
framesource->Release();
framesource = NULL;
}
IDepthFrame* frame = NULL;
if (SUCCEEDED(reader->AcquireLatestFrame(&frame))) {
cout << "not bad";
getchar();
return 100;
}
else{
cout << "not found";
getchar();
return 23;
}
}
else {
return -1;
}
}
На самом деле, если я подключу Kinect к своему ноутбуку или нет, вывод не изменится, и он будет «не найден». Когда я подключаю Kinect и запускаю программу, загорается индикатор Kinect. В некоторых готовых кодах Kinect работает правильно. В чем проблема?
Вы должны проверить возвращенный код ошибки для AcquireLatestFrame
, может быть, он может сказать вам, в чем проблема.
Вот совет: может быть, когда вы звоните AcquireLatestFrame
рамка пока недоступна. Поэтому поместите этот вызов в цикл, рано или поздно кадр будет доступен.
Других решений пока нет …