Это kinect для xbox 360, использующий библиотеку kinect.dll. Нет проблем с цветным потоком RgbResolution1280x960Fps12
или RgbResolution640x480Fps30
. Проблема возникает с инфракрасным потоком (InfraredResolution640x480Fps30
). Ниже приведен код и полученное изображение.
using (ColorImageFrame colorFrame = e.OpenColorImageFrame())
{
byte[] colorData = null;
if (colorFrame == null) return;
if (colorData == null)
colorData = new byte[colorFrame.PixelDataLength];
colorFrame.CopyPixelDataTo(colorData);
Marshal.FreeHGlobal(colorPtr);
colorPtr = Marshal.AllocHGlobal(colorData.Length);
Marshal.Copy(colorData, 0, colorPtr, colorData.Length);
if (ir) //ir is true if there is infrared stream
{
kinectVideoBitmap = new Bitmap(
colorFrame.Width / 2, //stream in 16 bit
colorFrame.Height,
colorFrame.Width * colorFrame.BytesPerPixel,
System.Drawing.Imaging.PixelFormat.Format32bppRgb, //probable error
colorPtr);
}
else
{
kinectVideoBitmap = new Bitmap(
colorFrame.Width,
colorFrame.Height,
colorFrame.Width * colorFrame.BytesPerPixel,
System.Drawing.Imaging.PixelFormat.Format32bppRgb,
colorPtr);
}
pic.Image = kinectVideoBitmap; //pic is picturebox
byte[] pixelData = new byte[colorFrame.PixelDataLength];
colorFrame.CopyPixelDataTo(pixelData);
Ошибка может быть обработкой PixelFormat
, указанной в коде, но я не думаю, что это зависит только от этого. Ниже приведено изображение, полученное из моего кода, и изображение, которое генерирует пример приложения "kinect explorer
". (оба изображения являются скриншотами)
Это изображение примера приложения Kinect explorer, вы можете видеть, насколько хорошо оно определено по качеству и шуму, что более важно, даже отдаленные объекты хорошо видны.
Это изображение моего приложения, в дополнение к различным цветам, полученным из неправильного пиксельного формата, шум таков, что вы не можете видеть ни один из удаленных объектов.
У вас есть идеи, как исправить и получить чистое изображение? Я заранее всех благодарю.