我想知道如何在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背景并不能解决问题(使骨架图像的黑色部分透明)
答案 0 :(得分: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));
解决了我的问题。 谢谢
答案 1 :(得分:0)
我尝试将Skeletal叠加到画布上的颜色或深度上,但它从未解决过。相反,当我查看SDK 1.6.0中的Kinect Explorer示例应用程序时,它们使用网格进行叠加。不幸的是,我还没有学到那么多,但是他们使用网格来表示颜色和深度,还有一个用于骨骼跟踪的画布。如果它有帮助,我可以发布一个片段。祝你好运!
答案 2 :(得分:0)
你基本上要问的是两个不同的问题:1)如何在DepthStream上显示SkeletonStream,这非常简单; 2)如何在ColorStream上显示SkeletonStream,这仍然很容易但有点复杂。
对问题1的回答)骨架流中关节的XYZ向量与深度流位于同一坐标系中。因此,如果使用Kinect SDK中深度相机的焦距将Deapth Stream绘制为二次网格,则可以将骨架绘制为相同坐标系中的线图。准确实现您想要在OpenGL中执行的操作的源代码here可以让您了解如何在wpf中实现此功能。
对问题2的回答)摄像机与深度摄像机具有不同的视野。要将骨架流显示到ColorStream,首先需要将骨架流中关节的XYZ矢量映射到深度流的坐标系,然后首先在背景中绘制视频帧,然后在骨架上绘制线图。面前。 您可以使用Kinect SDK提供的U-V纹理坐标轻松完成映射。了解如何获得UV here。