gpt4 book ai didi

c# - 使用 Azure Kinect DK 将 In32Rect 坐标转换为 Span

转载 作者:行者123 更新时间:2023-12-03 00:02:14 29 4
gpt4 key购买 nike

我一直在使用新的 Azure Kinect DK 制作一系列教程,但我偶然发现了一些让我难住的东西。

这是一个具有 MvvM 模式的 WPF 应用程序,它从 Kinect 获取输出,并具有一个组合框,允许用户从各种选项中选择输出类型。

我正在研究的最新选项是使用 Azure 自定义视觉 AI 进行品牌识别。我用多个品牌的软饮料训练了一个简单的模型,它正确地检测到品牌并为我提供了一个边界框,该边界框引用了该位置的原始图像的 %。

我使用以下代码将彩色相机输出为 Span 中的像素:

<BGRA> colourBuffer = capture.Color.GetPixels<BGRA>().Span;

Span<BGRA> outputBuffer = outputImage.GetPixels<BGRA>().Span;

我的目标是对彩色相机输出的像素进行着色,我已经成功地进行了 body 跟踪: Successfully shading pictures

我从自定义视觉 AI 中获得了品牌预测,这些预测以边界框的形式表示为原始图像的百分比。我将它们转换为 Int32Rects,以便更轻松地与彩色相机输出的纵横比 (1920x1080) 一起使用。

我的问题是,当我对像素进行着色时,跨度与我正在着色的像素不对应。整个代码在这里:https://github.com/craiggilchrist/mancavecoding-kinectdk/blob/feature/tutorial-3/src/Part%201%20-%20Connecting/KinectViewModel.cs但特别重要的部分是:


foreach (var prediction in _predictions)
{
// Pixels to colour will start at the top left pixel and finish after the width plus height has been iterated.
var bbX = (int)Math.Round(prediction.BoundingBox.Left * _colourWidth);
var bbX2 = bbX + ((int)Math.Round(prediction.BoundingBox.Width * _colourWidth));

var bbY = (int)Math.Round(prediction.BoundingBox.Top * _colourHeight);
var bbY2 = bbY + ((int)Math.Round(prediction.BoundingBox.Height * _colourHeight));

var region = new Int32Rect(
(int)(capture.Color.WidthPixels * prediction.BoundingBox.Left),
(int)(capture.Color.HeightPixels * prediction.BoundingBox.Top),
(int)(capture.Color.WidthPixels * prediction.BoundingBox.Width),
(int)(capture.Color.HeightPixels * prediction.BoundingBox.Height));

for (int x = region.X; x < region.X + region.Width; x++)
{
for (int y = region.Y; y < region.Y + region.Height; y++)
{
outputBuffer[(x * y)].R = 255;
}
}
}

这会导致以下像素呈现红色: Badly shaded pixels

我不知道如何正确地跨过连续内存并将其连接回我需要着色的矩形。

有人可以帮忙吗?

最佳答案

事实证明,我的 for 循环只是愚蠢的。正确的 for 循环应该是:

for (int y = region.Y; y < region.Y + region.Height; y++)
{
for (int x = region.X; x < region.X + region.Width; x++)
{
var index = (y * _colourWidth) + x;
outputBuffer[index].R = 255;
}
}

关于c# - 使用 Azure Kinect DK 将 In32Rect 坐标转换为 Span<BGRA>,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62885398/

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