0

我想知道如何在 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>

当我这样做时,只显示骨架图像,如果我切换两个图像,则显示彩色图像。似乎 Canvas 背景不能解决问题(使骨骼图像的黑色部分透明)

4

3 回答 3

1

我认为问题出在我的 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));

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

于 2013-10-28T13:10:44.180 回答
0

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

于 2013-10-27T20:49:42.577 回答
0

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

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

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

于 2013-10-27T23:25:14.610 回答