如何在 DepthStream 或 ColorStream Kinect WPF 上显示 SkeletonStream



我想知道如何在 Wpf 中覆盖两个 Image 对象。我制作了两个输出视频的流,一个用于骨骼,另一个只是普通视频。现在我想将它们加在一起,这样骨架就会显示在彩色视频上。我的 XAML 代码的一部分是

<Grid Name="layoutGrid">
    <Grid Name="VideoGrid" ClipToBounds="True" Background="AliceBlue">
        <Image Name="ColorImage" Width="640" Height="480"/>
        <Image Name="SkeletalImage" Width="640" Height="480"/>
        <Canvas Background="Transparent"/>
    </Grid>
    <StatusBar VerticalAlignment="Bottom" HorizontalAlignment="Center">
        <Button Name="Button1" Content="Skeleton Only" Width="120"/>
    </StatusBar>
</Grid>

当我这样做时,只显示骨骼图像,如果我切换两个图像,则显示彩色图像。似乎画布背景不起作用(使骨骼图像的黑色部分透明)

我认为问题出在我的 XAML 代码中,但实际上是在绘制透明背景以设置渲染大小时。骷髅图像的背景是黑色的

dc.DrawRectangle(Brushes.Black, null, 
                  new Rect(0.0, 0.0, RenderWidth, RenderHeight));

而不是透明

dc.DrawRectangle(Brushes.Transparent, null, 
                  new Rect(0.0, 0.0, RenderWidth, RenderHeight));

这解决了我的问题。不过谢谢

我尝试将骨架叠加到画布上的颜色或深度上,但从未成功。相反,当我在 SDK 1.6.0 中查看 Kinect 资源管理器示例应用程序时,它们使用网格进行覆盖。不幸的是,我还没有学到那么多,但他们使用网格来表示颜色和深度,并使用画布进行骨骼跟踪。如果有帮助,我可以发布一个片段。祝你好运!

你问的基本上是两个不同的问题:1)如何在DepthStream上显示SkeletonStream,这很容易,2)如何在ColorStream上显示SkeletonStream,这仍然很容易,但有点复杂。

对问题 1 的回答)骨架流中关节的 XYZ 矢量与深度流位于同一坐标系中。因此,如果使用 Kinect SDK 中深度相机的焦距将 Deapth 流绘制为二次网格,则可以在同一坐标系中将骨架绘制为线图。此处提供了完全实现您想要在 OpenGL 中执行的操作的源代码,它将让您了解如何在 wpf 中实现这一点。

对问题2的回答)摄像机的视野与深度摄像机不同。要将骨架流显示到 ColorStream,首先需要将骨架流中关节的 XYZ 矢量映射到深度流的坐标系,然后首先在背景中绘制视频帧,在正面绘制骨架作为线图。您可以使用 Kinect SDK 提供的 U-V 纹理坐标轻松进行映射。在这里查看如何获得紫外线。

最新更新