Я работаю над новым приложением, которое может получить доступ к видеопотоку от датчика Kinect V2. У меня есть приложение, работающее со стандартными видеопотоками RGB и Depth ... но я столкнулся с проблемой с потоком IR-видео. Я изменил пример found here в соответствии с моим приложением ... но значения пикселей, которые я возвращаю как часть моего растрового изображения, всегда черные (т.е. значение = 0). Вот часть кода, который я работает в моем MultiSourceFrameArrived обработчика событий:Kinect V2 IR Video Stream
using (InfraredFrame IRFrame = framew.InfraredFrameReference.AcquireFrame())
{
if (IRFrame != null)
{
FrameDescription FrameDesc = IRFrame.FrameDescription;
ushort[] IRData = new ushort[FrameDesc.Width * FrameDesc.Height];
IRImgBuffer = new byte[4 * FrameDesc.Width * FrameDesc.Height];
IRFrame.CopyFrameDataToArray(IRData);
int colorIndex = 0;
for (int IRIndex = 0; IRIndex < IRData.Length; ++IRIndex)
{
ushort depth = IRData[IRIndex];
ushort ir = IRData[IRIndex];
byte intensity = (byte)(ir >> 8);
IRImgBuffer[colorIndex++] = (byte)ir; // Blue
IRImgBuffer[colorIndex++] = (byte)ir; // Green
IRImgBuffer[colorIndex++] = (byte)ir; // Red
++colorIndex;
}
gotframe = true;
}
}
Это еще больше расстраивает, поскольку я не могу запустить это в отладчике. Если я поставлю точку останова в коде, чтобы увидеть, что такое значение Blue pixel (например), отладчик никогда не поймает его (не совсем уверен, почему). Может ли кто-нибудь помочь мне понять, почему значение интенсивности всегда равно 0?
Что вы получаете за 'IRData.Length'? Кажется, вы никогда не прыгаете в свой цикл 'for'. Поэтому первое мое предположение заключается в том, что 'IRData.Length = 0' – Adjit
IRData.Length возвращает значение 217088 ... что имеет смысл, поскольку разрешение разрешения ИК-камеры камеры (согласно этому сайту: http: // pterneas .com/2014/02/08/kinect-for-windows-version-2-overview /) - 512 x 424 = 217088 ... поэтому я думаю, что он попадает в цикл for. – andyopayne