gpt4 book ai didi

c# - Kinect V2 彩色流字节顺序

转载 作者:太空宇宙 更新时间:2023-11-03 10:40:45 24 4
gpt4 key购买 nike

我正在开发一个应用程序,它将流式传输来自 Kinect V2 传感器的颜色、深度和红外视频数据。现在我只是把应用程序的彩色视频部分放在一起。我已经阅读了一些教程,实际上我的应用程序中有一些视频数据 - 问题似乎是字节顺序似乎是错误的,这给了我一个奇怪的变色图像(见下文)。

enter image description here

那么,让我解释一下我是如何来到这里的。在我的代码中,我首先打开传感器并实例化一个新的多源帧读取器。创建阅读器后,我创建了一个名为 Reader_MultiSourceFrameArrived 的事件处理程序:

void Reader_MultiSourceFrameArrived(object sender, MultiSourceFrameArrivedEventArgs e)
{
if (proccessing || gotframe) return;

// Get a reference to the multi-frame
var reference = e.FrameReference.AcquireFrame();

// Open color frame
using (ColorFrame frame = reference.ColorFrameReference.AcquireFrame())
{
if (frame != null)
{
proccessing = true;
var description = frame.ColorFrameSource.FrameDescription;

bw2 = description.Width / 2;
bh2 = description.Height / 2;
bpp = (int)description.BytesPerPixel;

if (imgBuffer == null)
{
imgBuffer = new byte[description.BytesPerPixel * description.Width * description.Height];
}

frame.CopyRawFrameDataToArray(imgBuffer);
gotframe = true;
proccessing = false;
}
}
}

现在,每次接收到(而不是处理)帧时,它都应该将帧数据复制到一个名为 imgBuffer 的数组中。当我的应用程序准备就绪后,我会调用此例程将数组转换为可显示在屏幕上的 Windows 位图。

if (gotframe)
{
if (theBitmap.Rx != bw2 || theBitmap.Ry != bh2) theBitmap.SetSize(bw2, bh2);

int kk = 0;
for (int j = 0; j < bh2; ++j)
{
for (int i = 0; i < bw2; ++i)
{
kk = (j * bw2 * 2 + i) * 2 * bpp;
theBitmap.pixels[i, bh2 - j - 1].B = imgBuffer[kk];
theBitmap.pixels[i, bh2 - j - 1].G = imgBuffer[kk + 1];
theBitmap.pixels[i, bh2 - j - 1].R = imgBuffer[kk + 2];
theBitmap.pixels[i, bh2 - j - 1].A = 255;
}
}
theBitmap.needupdate = true;
gotframe = false;
}
}

因此,在运行之后,Bitmap 现在包含在屏幕上绘制图像所需的图像信息...但是,如上图所示 - 它看起来很奇怪。最明显的变化是在双 for 循环(我试过)中将像素 B、G、R 值分配给位图时简单地更改像素值的顺序……然而,这只会导致其他奇怪的彩色图像和没有一个提供准确的彩色图像。有什么想法我可能会出错吗?

最佳答案

这是 Bgra 吗?Kinect v2 for C# 中的正常“RGB”是 BGRA。

使用 Kinect SDK 2.0,您不需要所有这些“for”循环。用于分配位图中像素的函数是这个函数:

colorFrame.CopyConvertedFrameDataToIntPtr(
this.colorBitmap.BackBuffer,
(uint)(colorFrameDescription.Width * colorFrameDescription.Height * 4),
ColorImageFormat.Bgra);

1) 使用 Reader_ColorFrameArrived 从 kinect 获取框架(请参阅 ColorSamples - WPF);

2) 使用 Bgra 格式从 ColorFrameSource 创建 colorFrameDescription;

3) 创建要显示的位图;

如果有什么问题,请说。但是,如果您按照示例进行操作,实际上很清楚如何操作。

关于c# - Kinect V2 彩色流字节顺序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25426471/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com