Отображение глубины цвета Kinect v2 с использованием C#
Я пытаюсь отобразить карту глубины на цветовое пространство, используя функцию координат Mapper из SDK. Однако полученный результат не соответствует ожидаемому, он имеет меньшее соотношение сторон, и изображение кажется зеркальным.
Ниже приведен код, который я использовал:
depthWidth = depthFrameDescription.Width;
depthHeight = depthFrameDescription.Height;
var colorDesc = colorFrame.FrameDescription;
int colorWidth = colorDesc.Width;
int colorHeight = colorDesc.Height;
int size = colorWidth * colorHeight;
DepthSpacePoint[] colSpacePoints = new DepthSpacePoint[colorWidth * colorHeight];
using (KinectBuffer depthFrameData = depthFrame.LockImageBuffer())
using (KinectBuffer colorBuffer = colorFrame.LockRawImageBuffer())
{
this.bitmap.Lock();
if ((colorWidth == this.bitmap.PixelWidth) && (colorHeight == this.bitmap.PixelHeight))
{
byte[] colorFrameData = new byte[size * bytesPerPixel];
// Map the values here
ushort [] frameData = new ushort[depthWidth * depthHeight];
depthFrame.CopyFrameDataToArray(frameData);
coordinateMapper.MapColorFrameToDepthSpace(frameData, colSpacePoints);
this.bitmap.WritePixels(new Int32Rect(0, 0, colorWidth, colorHeight), colSpacePoints, colorWidth * bytesPerPixel, 0);
this.bitmap.AddDirtyRect(new Int32Rect(0, 0, this.bitmap.PixelWidth, this.bitmap.PixelHeight));
}
this.bitmap.Unlock();
}
this.bitmapBackBufferSize = (uint)![enter image description here][1]((this.bitmap.BackBufferStride * (this.bitmap.PixelHeight - 1)) + (this.bitmap.PixelWidth * this.bytesPerPixel));
isBitmapLocked = true;
1 ответ
Если вы пытаетесь отобразить координаты рамки глубины на цветную рамку, вам не хватает одного шага.
Вот ссылка, которая, вероятно, объясняет это лучше, чем я могу: http://www.bryancook.net/2014/03/mapping-between-kinect-color-and-depth.html
Но в вашем случае, когда вы используете
coordinateMapper.MapColorFrameToDepthSpace(frameData, colSpacePoints);
Вывод не должен использоваться, как вы его используете. Выходные данные этой функции содержат все точки, которые существуют как в цветовом пространстве, так и в пространстве глубины. Таким образом, чтобы отобразить их, вы хотите перебрать свои colSpacePoints и сделать что-то с каждым результатом, в примере, который я связал, он называется _colorSpacePoints, чтобы вы могли посмотреть, что он с ним делает.
Я застрял, пытаясь сделать, вероятно, что-то похожее на то, что вы делаете, однако через несколько дней я нашел, как правильно использовать отображение. Если вам нужна дополнительная помощь в решении вашей проблемы, скажите мне, что вы хотите отобразить на вашем WriteableBitmap.