gpt4 book ai didi

c# - Kinect 裁剪图像

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

我正在尝试裁剪视频 RGB 的矩形区域。首先,我找到了头部关节的坐标,并根据这个坐标在 RGB 视频上绘制了一个矩形。现在我想在另一个视频中只显示第一张图片中 rentangle 内部的图片。任何帮助都会很棒。

视频 RGB 显示在“RGBvideo”图像控件中。我想在“faceImage”图像控件中显示的裁剪图像

我在网上搜索过,但找不到解决办法。我很困惑。

非常感谢

最佳答案

欢迎来到 Stack Overflow,请不要多次问同一个问题。对于像 Kinect 这样不太受欢迎的标签,人们可能需要一些时间才能回答(该标签只有 79 个关注者)。

为简单起见,我假设您要裁剪出设定尺寸的图像(例如,从原始 800x600 像素裁剪出 60x60 像素)。在您的 VideoFrameReady 方法中,您从事件参数中获取 PlanarImage。此 PlanarImage 具有位字段,其中包含图像的所有 RGB 数据。只需一点数学知识,您就可以剪下一小块数据并将其用作较小的图像。

// update video feeds
void nui_VideoFrameReady(object sender, ImageFrameReadyEventArgs e)
{
PlanarImage image = e.ImageFrame.Image;

// Large video feed
video.Source = BitmapSource.Create(image.Width, image.Height, 96, 96, PixelFormats.Bgr32, null, image.Bits, image.Width * image.BytesPerPixel);

// X and Y coordinates of the smaller image, and the width and height of smaller image
int xCoord = 100, yCoord = 150, width = 60, height = 60;

// Create an array to copy data into
byte[] bytes = new byte[width * height * image.BytesPerPixel];

// Copy over the relevant bytes
for (int i = 0; i < height; i++)
{
for (int j = 0; j < width * image.BytesPerPixel; j++)
{
bytes[i * (width * image.BytesPerPixel) + j] = image.Bits[(i + yCoord) * (image.Width * image.BytesPerPixel) + (j + xCoord * image.BytesPerPixel)];
}
}

// Create the smaller image
smallVideo.Source = BitmapSource.Create(width, height, 96, 96, PixelFormats.Bgr32, null, bytes, width * image.BytesPerPixel);
}

请确保您理解代码,而不是仅仅复制/粘贴它。两个 for 循环用于基本数组复制,并考虑了每个像素的字节数(BGR32 为 4 个)。然后您使用原始数据的那个小子集来创建一个新的 BitmapSource。您需要根据自己的需要更改宽度/高度,并根据头部跟踪确定 X 和 Y 坐标。

关于c# - Kinect 裁剪图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7682293/

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